CSRF対策の流れ

2016/08/29

CSRF対策が必要な状況が2つあるっぽい。表現が間違っているかもしれないけど下記の2つ。

  • フォーム送信 – 画面が切り替わるタイプ
  • Ajax送信 – 画面が切り替わらないタイプ

※他にもあるかもしれない。

基本はサーバー側でキーになる何かを持つ。で、ブラウザ側から送られてきたキーが一致したらOKって感じ。さらに、そのキーは1回使ったら消えてしまうタイプ。
※ここでいう「キー」がいわゆる「トークン」になるっぽい。

フォーム送信 – 画面が切り替わるタイプ

  1. フォームを表示するタイミングでCSRF対策のトークンを発行し、セッションに格納。
  2. フォームに生成したトークンを埋め込む。
  3. 「送信ボタン」を押す
  4. フォームデータのトークンとセッションのトークンを比較
  5. 比較後、セッションのトークンを破棄

※仮に「送信ボタン」を押さずに違うページに遷移したり、ブラウザを閉じたりしたときはセッションのトークンを破棄してあげる仕組みが欲しい。

Ajax送信 – 画面が切り替わらないタイプ

画面が変わらないのでどっかのタイミングでトークンを再生成する必要がある。

  1. フォームを表示するタイミングでCSRF対策のトークンを発行し、セッションとクッキーに格納。
  2. 「送信ボタン」を押す
  3. Ajaxで送信する前にクッキーからトークンを抜き出す
  4. Ajaxで送信した先でトークンとセッションのトークンを比較
  5. 比較後、セッションのトークンを再生成し、クッキーに格納

※仮に「送信ボタン」を押さずに違うページに遷移したり、ブラウザを閉じたりしたときはセッションのトークンを破棄してあげる仕組みが欲しい。

新着(ニュース関連以外)

2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。
2017-06-06
FuelPHPのOILでtry・catchを使ったらエラーになった。