Introduction
CSRF (Cross-Site Request Forgery) est une attaque qui consiste à envoyer des requêtes non voulues en usurpant l’identité d’un utilisateur connecté. Par exemple, supposons que votre application accepte un changement d’adresse e-mail viaPOST /user/email. Si un attaquant place sur un autre site un formulaire qui envoie automatiquement cette requête, l’adresse e-mail de l’utilisateur pourrait être modifiée sans qu’il s’en aperçoive.
Dans Laravel 13, la protection CSRF est activée par défaut grâce au mécanisme inclus dans le groupe de middlewares web.
Prévention des attaques CSRF
Le middlewarePreventRequestForgery de Laravel bloque les CSRF sur deux couches :
- Vérification de l’Origin (en-tête
Sec-Fetch-Site) - Vérification du token (token CSRF par session)
Vérification de l’Origin
Laravel commence par consulterSec-Fetch-Site pour déterminer si la requête provient de la même Origin. C’est particulièrement efficace en HTTPS.
Si la vérification de l’Origin réussit, la requête est autorisée à ce stade. Sinon, la vérification classique du token CSRF s’exécute.
Mode Origin-only
Vous pouvez désactiver le repli sur la vérification du token pour ne juger la requête que par l’Origin.403 au lieu de 419.
Pour autoriser les requêtes same-site (entre sous-domaines par exemple), utilisez allowSameSite.
Vérification du token
Laravel génère un token CSRF par session. Vous pouvez l’obtenir aveccsrf_token() ou depuis la session.
POST, PUT, PATCH ou DELETE sur des routes web, incluez toujours @csrf.
Exclusion d’URI
Pour les requêtes venant de services externes (par exemple les webhooks Stripe), il peut être nécessaire d’exclure certaines URI de la protection CSRF.Dans la mesure du possible, placez les routes de webhook en dehors du groupe de middlewares
web et gardez les exclusions au minimum.En-tête X-CSRF-TOKEN
Laravel vérifie non seulement le_token du formulaire mais aussi l’en-tête X-CSRF-TOKEN.
Exposez d’abord le token dans une balise meta.
En-tête X-XSRF-TOKEN
Laravel envoie également un cookie chiffréXSRF-TOKEN. Axios et Angular peuvent utiliser cette valeur automatiquement dans l’en-tête X-XSRF-TOKEN pour les requêtes de même Origin.
C’est pourquoi, dans une SPA ou une implémentation AJAX, la protection CSRF est parfois active sans que vous ayez à configurer l’en-tête manuellement.