Protection CSRF dans Laravel
Résumé
24 Février 2025
1 Introduction
La protection CSRF (Cross-Site Request Forgery) est une mesure de sé-
curité essentielle dans Laravel pour prévenir les attaques où un utilisateur
authentifié exécute involontairement des actions malveillantes.
2 Génération et Utilisation du Jeton CSRF
— Laravel génère un jeton CSRF pour chaque session utilisateur.
— Ce jeton est stocké dans la session et est comparé avec le jeton envoyé
dans les requêtes.
3 Ajout du Jeton dans un Formulaire
Chaque requête POST, PUT, PATCH ou DELETE doit inclure un jeton
CSRF :
< form method = " POST " action = " / profile " >
@csrf
< input type = " text " name = " name " required >
< button type = " submit " > Envoyer </ button >
</ form >
Cela est équivalent à :
< input type = " hidden " name = " _token " value = " {{ ␣ csrf_token () ␣ }} "
>
1
4 Récupération du Jeton CSRF
4.1 Depuis la session
use Illuminate \ Http \ Request ;
Route :: get ( ’/ token ’ , function ( Request $request ) {
return $request - > session () -> token () ;
}) ;
4.2 Avec csrf_token()
Route :: get ( ’/ token ’ , function () {
return csrf_token () ;
}) ;
4.3 Dans une Vue Blade
<p > Votre token CSRF : {{ csrf_token () }} </ p >
4.4 Utiliser csrf_field()
contenant le jeton CSRF pour les formulaires HTML :
< form method = " POST " action = " / profile " >
{{ csrf_field () }}
</ form >
2
5 Exclusion de Routes de la Protection CSRF
Certaines routes (ex. : webhooks Stripe) doivent être exclues :
namespace App \ Http \ Middleware ;
use Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken as
Middleware ;
class VerifyCsrfToken extends Middleware {
protected $except = [
’ stripe /* ’ ,
’ http :// example . com / api /* ’ ,
];
}
6 En-têtes CSRF et XSRF
6.1 X-CSRF-TOKEN
Laravel permet d’ajouter le token CSRF dans l’en-tête d’une requête
AJAX :
< meta name = " csrf - token " content = " {{ ␣ csrf_token () ␣ }} " >
$ . ajaxSetup ({
headers : {
’X - CSRF - TOKEN ’: $ ( ’ meta [ name =" csrf - token "] ’) . attr ( ’
content ’)
}
}) ;
6.2 X-XSRF-TOKEN
Laravel stocke aussi le token dans un cookie XSRF-TOKEN, utilisé par
certaines bibliothèques comme Axios :
axios . defaults . headers . common [ ’X - XSRF - TOKEN ’] = getCookie ( ’
XSRF - TOKEN ’) ;
3
7 Test d’Erreur CSRF (419 Page Expired)
Pour tester la protection CSRF, soumettez un formulaire sans jeton et
vous obtiendrez une erreur :
419 | Page Expired
8 Conclusion
Laravel fournit une protection CSRF robuste grâce aux jetons inclus au-
tomatiquement dans les sessions et formulaires. Il est possible d’exclure cer-
taines routes si nécessaire et d’utiliser des en-têtes pour la gestion AJAX.