概要
revolution/laravel-fetch-metadata は、ブラウザが送信するSec-Fetch-* HTTPヘッダーを検証するセキュリティミドルウェアパッケージです。リクエストの発生元・モード・宛先・ユーザー操作の有無に基づいて、許可するリクエストを制御できます。
ブラウザに組み込まれたセキュリティ機能を活用することで、正規ユーザーのエクスペリエンスを損なわずに、不正なオリジンからの悪意あるリクエストを防止できます。
Laravel 13では、CSRFプロテクションのOrigin検証に
Sec-Fetch-Site ヘッダーが使われるようになりました。詳細はCSRFプロテクションを参照してください。インストール
ミドルウェアエイリアスの登録
bootstrap/app.php にミドルウェアのエイリアスを登録します。
ミドルウェアの説明
SecFetchSite
Sec-Fetch-Site ヘッダーは、リクエストの発生元とターゲットのオリジンの関係を示します。デフォルトでは same-origin と none(直接アクセス)のみを許可します。
詳細はMDN ドキュメントを参照してください。
SecFetchMode
Sec-Fetch-Mode ヘッダーは、リクエストのモードを示します。デフォルトでは navigate と cors を許可します。
詳細はMDN ドキュメントを参照してください。
SecFetchDest
Sec-Fetch-Dest ヘッダーは、リクエストの宛先リソースタイプを示します。
詳細はMDN ドキュメントを参照してください。
SecFetchUser
Sec-Fetch-User ヘッダーは、リクエストがユーザーの操作によって開始されたかどうかを示します。値は ?1(ユーザー操作あり)のみです。
ルーティングでの使用例
基本的な使用
パラメータで許可する値を指定する
複数のパラメータを指定する
エイリアスを使わない場合
複数のミドルウェアを組み合わせる
エラーハンドリング
Sec-Fetch-* ヘッダーの値が不正な場合、Symfony\Component\HttpKernel\Exception\BadRequestHttpException がスローされます。
bootstrap/app.php でレスポンスをカスタマイズできます。
CSRFプロテクションとの関係
Laravel 13では、PreventRequestForgery ミドルウェアがCSRF保護の最初のステップとして Sec-Fetch-Site ヘッダーによるOrigin検証を行うようになりました。このパッケージはさらに細かい粒度でFetch Metadataヘッダーを活用し、アプリケーションのセキュリティを強化できます。
詳細はCSRFプロテクションを参照してください。
最新情報は GitHub リポジトリ を参照してください。