Este paquete de Symfony proporciona protección contra falsificación de solicitudes entre sitios (CSRF o XSRF) para aplicaciones del lado del cliente que solicitan puntos finales proporcionados por Symfony a través de XHR.
Fuertemente influenciado e inspirado por DunglasAngularCsrfBundle
Para almacenar el token CSRF en el lado del cliente, se puede configurar una cookie que contenga el token mediante una o más rutas predeterminadas. El paquete está preconfigurado de manera que los clientes http del lado del cliente modernos, como Axios, recogerán automáticamente dicha cookie. En solicitudes posteriores a Symfony, el token CSRF se puede agregar al encabezado HTTP para validarlo en el lado del servidor. Nuevamente, es posible que algunos clientes ya lo hagan automáticamente, por ejemplo, Axios.
Utilice Composer para instalar este paquete:
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
Las rutas se pueden configurar para proporcionar ( create
) un token, asegurar ( require
) un token o ambas.
Dado que los valores predeterminados de una única ruta o una colección de rutas se utilizan para configurar el comportamiento, es posible hacerlo mediante archivos de configuración o anotaciones.
# 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 obtener más información sobre las condiciones, consulte ExpressionLanguage.
Como anotación:
// 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 ()
{
// ...
}
}
La protección CSRF incorporada de formularios se deshabilitará automáticamente para las rutas que estén configuradas para ser seguras mediante el token almacenado en el encabezado HTTP, siempre que dicho token pueda validarse exitosamente.