Skip to main content

概要

revolution/laravel-fetch-metadata は、ブラウザが送信する Sec-Fetch-* HTTPヘッダーを検証するセキュリティミドルウェアパッケージです。リクエストの発生元・モード・宛先・ユーザー操作の有無に基づいて、許可するリクエストを制御できます。 ブラウザに組み込まれたセキュリティ機能を活用することで、正規ユーザーのエクスペリエンスを損なわずに、不正なオリジンからの悪意あるリクエストを防止できます。
Laravel 13では、CSRFプロテクションのOrigin検証に Sec-Fetch-Site ヘッダーが使われるようになりました。詳細はCSRFプロテクションを参照してください。
詳細なFetch Metadataの仕様については、MDN ドキュメントを参照してください。

インストール

ミドルウェアエイリアスの登録

bootstrap/app.php にミドルウェアのエイリアスを登録します。
一部のミドルウェアだけを使うこともできます。エイリアス名は任意に変更できます。

ミドルウェアの説明

SecFetchSite

Sec-Fetch-Site ヘッダーは、リクエストの発生元とターゲットのオリジンの関係を示します。デフォルトでは same-originnone(直接アクセス)のみを許可します。 詳細はMDN ドキュメントを参照してください。

SecFetchMode

Sec-Fetch-Mode ヘッダーは、リクエストのモードを示します。デフォルトでは navigatecors を許可します。 詳細はMDN ドキュメントを参照してください。

SecFetchDest

Sec-Fetch-Dest ヘッダーは、リクエストの宛先リソースタイプを示します。 詳細はMDN ドキュメントを参照してください。

SecFetchUser

Sec-Fetch-User ヘッダーは、リクエストがユーザーの操作によって開始されたかどうかを示します。値は ?1(ユーザー操作あり)のみです。
SecFetchUser ミドルウェアを使用すると、検索エンジンのクローラーやAIエージェントもブロックされます。インデックスが必要な公開ページには使用しないでください。

ルーティングでの使用例

基本的な使用

パラメータで許可する値を指定する

複数のパラメータを指定する

エイリアスを使わない場合

複数のミドルウェアを組み合わせる

エラーハンドリング

Sec-Fetch-* ヘッダーの値が不正な場合、Symfony\Component\HttpKernel\Exception\BadRequestHttpException がスローされます。 bootstrap/app.php でレスポンスをカスタマイズできます。

CSRFプロテクションとの関係

Laravel 13では、PreventRequestForgery ミドルウェアがCSRF保護の最初のステップとして Sec-Fetch-Site ヘッダーによるOrigin検証を行うようになりました。このパッケージはさらに細かい粒度でFetch Metadataヘッダーを活用し、アプリケーションのセキュリティを強化できます。 詳細はCSRFプロテクションを参照してください。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年5月28日