volnix/csrfを使ってみる

CSRF対策のCompose ライブラリ volnix/csrf

CSRF対策のために発行したトークンをセッションとフォームにセット、リクエスト時に比較して一致しているかどうかを判定します。使い方はGithubのRead.meのとおりで難しくはないですが、日本語ドキュメントがみつからなかったので備忘録として。

 

インストール

composer requireするだけでした。

  1.  
  2. $ composer require volnix/csrf
  3.  

 

サンプル

いたってシンプルです。

  1.  
  2. <?php
  3.  
  4. session_start();
  5.  
  6. require '../../../vendor/autoload.php';
  7.  
  8. use Volnix\CSRF\CSRF;
  9.  
  10. if (CSRF::validate($_POST)) {
  11.     echo 'OK';
  12. } else {
  13.     echo 'NG';
  14. }
  15. ?>
  16. <form action="" method="post">
  17.     <input type="hidden" name="<?= CSRF::TOKEN_NAME ?>" value="<?= CSRF::getToken() ?>"/>
  18.     <input type="text" name="action" placeholder="Enter an action."/>
  19.     <input type="submit" value="Submit" name="sub"/>
  20. </form>
  21.  

 

おわり

他にもGETメソッドで使用する方法や、hiddenタイプのinput要素を発行するする方法などが本家のGithubのRead.meに記載されています。

トークンはvalidateしたときに再発行されるので、例えばGETパラメータにトークンをセットした場合にはそのままリロードされたらエラーになってしまうとか、フォームの入力をAjaxで送信する場合には都度再セットが必要とか、運用上はなにかしら工夫が必要そうです。

 

参照サイト

 

関連記事