Este pacote Symfony fornece proteção Cross Site Request Forgery (CSRF ou XSRF) para aplicativos do lado do cliente que solicitam endpoints fornecidos pelo Symfony por meio do XHR.
Fortemente influenciado e inspirado por DunglasAngularCsrfBundle
Para armazenar o token CSRF do lado do cliente, um cookie contendo o token pode ser definido por uma ou mais rotas predeterminadas. O pacote é pré-configurado de forma que clientes HTTP modernos do lado do cliente, como o Axios, coletem automaticamente o referido cookie. Em solicitações subsequentes ao Symfony, o token CSRF pode então ser adicionado ao cabeçalho HTTP para ser validado no lado do servidor. Novamente, alguns clientes já podem fazer isso automaticamente, por exemplo, Axios.
Use o Composer para instalar este pacote:
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
As rotas podem ser configuradas para fornecer ( create
) um token, ser protegidas por ( require
) um token ou ambos.
Como os padrões de uma única rota ou de uma coleção de rotas são usados para configurar o comportamento, é possível fazê-lo por meio de arquivos de configuração ou anotações.
# 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() '
Para obter mais informações sobre condições, consulte ExpressionLanguage
Como anotação:
// 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 ()
{
// ...
}
}
A proteção CSRF integrada de formulários será automaticamente desabilitada para rotas configuradas para serem protegidas por meio do token armazenado no cabeçalho HTTP, desde que esse token possa ser validado com sucesso.