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-04-11
動画をライトボックス風に表示したい・・・ライトボックス風って何? とりあえずbootstrapで対応したい。
2017-04-05
GitHubとかでzipをダウンロードすると・・・srcとdistと中身が似たようなのがよくあるので調べてみた。
2017-03-23
Wordpressのアドバンスドカスタムフィールドの値で検索や出力したい。
2017-03-16
PC・AからPC・BにはTeamViewerでLAN接続できるのに、PC・BからPC・AにLAN接続できないので、その対応。
2017-03-10
wordpressで投稿した際に強制的にカテゴリを付与したい・・・。