前回で近いうちにAjaxのセキュリティについて書きます!と宣言しましたが、あれはつまりCSRF攻撃の対策についてでした。今回はAjaxでCSRF対策を行う方法を書きます。 先に結論 Ajax通信におけるCSRF攻撃対策は通常の遷移時に施す対策と考え方はかわりません。 実装方法 ログイン時にトークンを生成しセッションオブジェクトにセットし、トークンをクライアントに送信 クライアント側のjsスクリプト内でトークンをAjax通信時に常に付加するように設定 サーバー側でAjaxで送信されたトークンの有無とセッションオブジェクト内のトークの一致を確認 ログアウト時にセッションは全て破棄 ここで生成するトークンはワンタイムではないです。ログイン時にずっと使いまわします。 ところで、パーフェクトPHPチルドレンとしては見逃せないエントリが CSRF対策のトークンをワンタイムにしたら意図に反して脆弱になっ