CSRF攻撃からLaravelを保護する方法
LaravelはCSRF攻撃を防ぐためのいくつかの手段を提供しています。以下は一般的な防御策です。
- CSRFトークンの使用: Laravelは各ユーザーに対して1つのCSRFトークンを自動的に生成し、セッションに保管します。フォーム送信時には、リクエストにこのトークンを含め、サーバー側で検証を行ってください。検証に失敗した場合はTokenMismatchException例外がスローされます。
- CSRF ミドルウェアの追加: Laravel はデフォルトで、App\Http\Middleware\VerifyCsrfToken ミドルウェアに CSRF 保護メカニズムを実装しています。このミドルウェアは、リクエスト内の CSRF トークンの有効性を検証します。ミドルウェア内で、一部の URL と HTTP 動詞を無視するように設定できます。
- AJAXリクエスト時にCSRFトークンをリクエストヘッダーに含める:POSTリクエストを行う場合のAJAXでは、リクエストヘッダーにX-CSRF-TOKENのフィールドを追加し、値としてCSRFトークンを与える必要があります。
- フォームでは、Laravel が提供する @csrf 指示を使用します。Laravel の Blade テンプレートエンジンには @csrf 指示があり、それを使うと、現在のユーザーの CSRF トークンを含む非表示の入力フィールドが自動的に生成されます。フォームに @csrf を含めるだけで済みます。
- 例外リストの設定方法: 特定のURLをCSRF除外リストに追加することで、それらのURLによるCSRFトークン検証をスキップできるように設定できます。例外リストの設定は、App\Http\Middleware\VerifyCsrfToken ミドルウェアの $except プロパティで行います。
LaravelはデフォルトでCSRF保護を処理しますので、上記の手順に従うだけで設定は完了です。