LaravelとFuelPHPのCSRF関連
作成日:2019-03-29, 更新日:2019-04-02
経緯
1.FuelPHPを使っていた
2.Laravelも使うようになった
3.Laravelでcsrf対策をしようとしたらトークンが変わらず困った:formのボタン連打による多重送信が可能だった
※ブラウザの「戻る」とかは処理完了時にトークンのリフレッシュだけで対応可能。
基本
間違っているかもしれないけど・・・
トークン
・FuelPHP:ワンタイムトークン
・Laravel:固定トークン
トークンチェック
・FuelPHPの場合:「ルーティング」→「コントローラ」
→「コントローラ」でトークンチェック
・Laravelの場合:「ルーティング」→[ミドルウェア]→「コントローラやビューなど」
→「ミドルウェア」でトークンチェック
LaravelでCSRF対策
・基本formの多重送信が問題かと思う。
▼対策
・formのボタンをクリック→ボタンを無効化
・ワンタイムトークンにする→「ミドルウェア」でトークンを再生成
「ミドルウェアでトークンを再生成」することが「ワンタイムトークン」と同義なのかは知らない。
→でも多重送信は対策できるから良しとする
ajaxが絡むならコントローラーで新しいとトークンを返してやればOK。
→セキュリティ的に問題無いのか、あるのかが分からない。
・・・form送信のときもHTMLにトークンを埋め込んでいるんだから問題無いような気もするが・・・