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. 比較後、セッションのトークンを再生成し、クッキーに格納

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

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

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい