DneustadtCsrfCookieBundle
1.0.7
此 Symfony 套裝組合為透過 XHR 請求 Symfony 提供的端點的用戶端應用程式提供跨站點請求偽造(CSRF 或 XSRF)保護。
深受 DunglasAngularCsrfBundle 的影響與啟發
為了在客戶端儲存 CSRF 令牌,可以透過一個或多個預定路由設定包含令牌的 cookie。此捆綁包已預先配置,現代用戶端 http 用戶端(例如 Axios)將自動取得所述 cookie。在對 Symfony 的後續請求中,可以將 CSRF 令牌新增至 HTTP 標頭以在伺服器端進行驗證。同樣,某些客戶端可能已經自動執行此操作,例如 Axios。
使用 Composer 安裝此捆綁包:
composer require dneustadt/csrf-cookie-bundle
# config/packages/dneustadt_csrf_cookie.yaml
dneustadt_csrf_cookie :
# Generally enable/disable the CSRF protection
enable : true
# ID used to generate token
id : csrf
# Name of the cookie the token is stored in
name : XSRF-TOKEN
# Cookie expiration
expire : 0
# Cookie path
path : /
# Cookie domain
domain : null
# Cookie HttpOnly
httpOnly : true
# Cookie secure
secure : false
# Name of the HTTP header the token is expected to be stored in
header : X-XSRF-TOKEN
# Cookie same site policy
sameSite : lax
可以將路由設定為提供( create
)令牌、透過( require
)令牌保護或兩者兼而有之。
由於單一路由或路由集合的預設值用於配置行為,因此可以透過設定檔或註解來完成此操作。
# config/routes.yaml
api_controllers :
resource : ../src/Controller/Api
type : annotation
defaults :
csrf :
# bool or array of allowed methods
create : true
# bool or array of allowed methods
require :
- ' POST '
- ' PUT '
- ' PATCH '
- ' DELETE '
# array of route names to be excluded from create/require in this collection
exclude :
- ' app_api_blog_index '
# additional condition using ExpressionLanguage syntax
condition : ' request.isXmlHttpRequest() '
有關條件的更多信息,請參閱 ExpressionLanguage
作為註釋:
// src/Controller/Api/ExampleController.php
namespace App Controller Api ;
// ...
class ExampleController extends AbstractController
{
/**
* @Route("/api/index", methods={"GET","HEAD"}, defaults={"csrf": {"create": true}})
*/
public function index ()
{
// ...
}
}
對於配置為透過儲存在 HTTP 標頭中的令牌進行保護的路由,如果可以成功驗證所述令牌,則內建的 CSRF 表單保護將自動停用。