ラボ > FuelPHPLaravel、Lumen:セキュリティ絡み

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にトークンを埋め込んでいるんだから問題無いような気もするが・・・