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 表单保护将自动禁用。