laravel:request-forgery-protection について
laravel:request-forgery-protectionは、Laravelの状態変更ルートをクロスサイトリクエストフォージェリから守るセキュリティスキルです。Laravel 13のオリジン対応ミドルウェア、トークン検証、Webhookの除外、テスト方法を扱います。
主な機能
- 01Laravel 13 PreventRequestForgeryの利用指針
- 02トークンとオリジンによる検証
- 03範囲を限定したWebhook除外と署名検証
- 04CSRFテストの推奨事項
活用シーン
- 01Laravel 13の偽造防止ミドルウェアへの更新
- 02状態変更ルートの保護
- 03サードパーティWebhookの安全な除外
- 04CSRFトークンの欠落や無効をテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:request-forgery-protectionインストール後、Claude Code で/laravel:request-forgery-protectionを入力して読み込まれたか確認します。
詳細
リクエスト偽造対策
クロスサイトリクエストフォージェリから状態変更ルートを保護します。Laravel 13 ではこれを PreventRequestForgery として正式に導入し、トークンベースの CSRF に加えて、オリジンを考慮した検証(Sec-Fetch-Site)を追加しています。
コマンド
# Blade forms still emit tokens
<form method="POST" action="/profile">
@csrf
...
</form>
# Laravel 13+: reference the new middleware class
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; // was: VerifyCsrfToken
->withoutMiddleware([PreventRequestForgery::class]);
# Optional origin-only mode (bootstrap/app.php)
->withMiddleware(function (Middleware $middleware) {
$middleware->preventRequestForgery(originOnly: true);
})
# Exclude webhook URIs from verification
$middleware->validateCsrfTokens(except: ['stripe/*']);
パターン
- フォームでは
@csrfを使い続けてください。オリジン検証は追加の対策であり、トークンによるフォールバックは古いブラウザーや HTTP に対応します - すべてのクライアントが HTTPS 経由の最新ブラウザーである場合に限り、
originOnlyを有効にしてください - サードパーティの Webhook エンドポイントは明示的に除外し、代わりに署名を検証してください
- 13.x にアップグレードする際は、
VerifyCsrfTokenの参照をPreventRequestForgeryに置き換えてください(旧名は非推奨のエイリアスとして引き続き使用できます) - 統合の失敗を「修正」するために、偽造対策を全体で無効にしないでください。URI ごとに除外を設定してください
テスト
- フィーチャーテストではデフォルトで CSRF がバイパスされます。除外された Webhook ルートとその署名検証について、明示的なテストを追加してください
- 該当する場合は、トークンがない場合や無効な場合に 419 が返されることをアサートしてください
コメント
Markdown 対応