Skip to main content

概觀

revolution/laravel-fetch-metadata 是一個驗證瀏覽器所傳送的 Sec-Fetch-* HTTP 標頭的安全性 middleware 套件。可依請求的來源、模式、目的地、是否有使用者操作等條件,控制允許的請求。 透過活用瀏覽器內建的安全性功能,可以在不影響正常使用者體驗的前提下,防止來自非法 origin 的惡意請求。
在 Laravel 13 中,CSRF 保護的 Origin 驗證會使用 Sec-Fetch-Site 標頭。詳細請參閱CSRF 保護
Fetch Metadata 的詳細規範請參閱 MDN 文件

安裝

註冊 middleware 別名

bootstrap/app.php 註冊 middleware 別名。
也可以只使用部分 middleware。別名名稱可自由變更。

Middleware 說明

SecFetchSite

Sec-Fetch-Site 標頭表示請求發生來源與目標 origin 的關係。預設僅允許 same-originnone(直接存取)。 詳細請參閱 MDN 文件

SecFetchMode

Sec-Fetch-Mode 標頭表示請求的模式。預設允許 navigatecors 詳細請參閱 MDN 文件

SecFetchDest

Sec-Fetch-Dest 標頭表示請求的目的地資源類型。 詳細請參閱 MDN 文件

SecFetchUser

Sec-Fetch-User 標頭表示請求是否由使用者操作而觸發。值僅有 ?1(有使用者操作)。
使用 SecFetchUser middleware 時,搜尋引擎爬蟲與 AI Agent 也會被阻擋。不應用於需要被索引的公開頁面。

路由使用範例

基本使用

以參數指定允許的值

指定多個參數

不使用別名

組合多個 middleware

錯誤處理

Sec-Fetch-* 標頭的值不合法時,會拋出 Symfony\Component\HttpKernel\Exception\BadRequestHttpException 可在 bootstrap/app.php 中自訂回應。

與 CSRF 保護的關係

在 Laravel 13 中,PreventRequestForgery middleware 作為 CSRF 保護的第一步,會使用 Sec-Fetch-Site 標頭進行 Origin 驗證。本套件可進一步以更細的粒度活用 Fetch Metadata 標頭,強化應用程式的安全性。 詳細請參閱CSRF 保護
最新資訊請參閱 GitHub 儲存庫
最後修改於 2026年8月2日