Dieses Symfony-Bundle bietet Cross Site Request Forgery (CSRF oder XSRF)-Schutz für clientseitige Anwendungen, die von Symfony bereitgestellte Endpunkte über XHR anfordern.
Stark beeinflusst und inspiriert von DunglasAngularCsrfBundle
Um das CSRF-Token clientseitig zu speichern, kann über eine oder mehrere vorgegebene Routen ein Cookie gesetzt werden, das das Token enthält. Das Bundle ist so vorkonfiguriert, dass moderne clientseitige HTTP-Clients wie Axios das Cookie automatisch abrufen. Bei nachfolgenden Anfragen an Symfony kann das CSRF-Token dann zum HTTP-Header hinzugefügt werden, um serverseitig validiert zu werden. Auch hier tun einige Clients dies möglicherweise bereits automatisch, z. B. Axios.
Verwenden Sie Composer, um dieses Bundle zu installieren:
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
Routen können so eingerichtet werden, dass sie entweder einen Token bereitstellen ( create
), durch einen Token gesichert werden ( require
) oder beides.
Da zur Konfiguration des Verhaltens die Standardwerte einer einzelnen Route oder einer Routensammlung verwendet werden, ist dies entweder über Konfigurationsdateien oder Annotationen möglich.
# 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() '
Weitere Informationen zu Bedingungen finden Sie unter ExpressionLanguage
Als Anmerkung:
// 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 ()
{
// ...
}
}
Der integrierte CSRF-Schutz von Formularen wird automatisch für Routen deaktiviert, die für die Sicherung mithilfe des im HTTP-Header gespeicherten Tokens konfiguriert sind, sofern das Token erfolgreich validiert werden kann.