Protéger Laravel contre le CSRF

Voyons comment protéger très facilement votre application Laravel contre les attaques CSRF (Cross Site Request Forgery).

Qu’est-ce qu’une attaque CSRF ?

Si vous voulez avoir un exemple clair de ce en quoi ça consiste, je vous invite à aller jeter un coup d’oeil sur Wikipedia.

 

Dans la pratique

Une des manières efficaces de se prémunir contre ce type d’attaque est d’accompagner chaque formulaire à protéger d’un jeton (en anglais “token”) d’identification de session. Pour ce faire, lorsqu’un visiteur se connecte sur votre site, vous enregistrez en session une chaîne de caractère aléatoire. Cette même chaîne est récupérée en session et passée au formulaire, sous la forme d’un champ de type “hidden”.  Lorsque le formulaire est posté, votre système de validation doit vérifier que le champ caché contient la même valeur que celle enregistrée en session. Si ça n’est pas le cas, ça signifie que quelqu’un a essayé de soumettre le formulaire depuis un autre endroit que votre site. Il faut alors annuler le traitement de ce formulaire.

 

Le filtre Laravel

Laravel permet de faire tout ceci très facilement via un filtre mis à votre disposition avec chaque installation du Framework. Voici le code de ce filtre:

Que fait ce code?

Ce code enregistre un filtre qui vérifie que le jeton (token) de session généré automatiquement par Laravel est bien identique à la valeur de l’input posté sous l’identifiant “_token”. Si ça n’est pas le cas, une exception (TokenMismatchException) est lancée et le traitement du formulaire donc est arrêté.

 

Mise en place dans le formulaire

Pour ajouter automatiquement ce champ, il vous suffit d’utiliser la classe “Form”  pour créer vos formulaires.

Ce code Blade va générer un code HTML similaire à ceci:

Le champ “_token” est bien généré et il ne vous reste plus qu’à traiter chaque envoi avec le filtre dont nous venons de parler.

Appliquer le filtre ‘csrf’

Ce que nous allons faire ici est simple. Pour chaque Route qui correspond à un envoi de formulaire, appliquons le filtre ‘csrf’:

Et voilà! Tous vos formulaires sont maintenant protégés contre les attaques CSRF.

Si vous souhaitez avoir un contrôle plus chirurgicale sur les formulaires à protéger, vous pouvez toujours le faire au cas par cas, avec le code suivant:

 

Conclusion

Vous savez maintenant tout ce qu’il y a à savoir pour protéger votre application Laravel contre les attaques CSRF. Une fois encore, Laravel nous facilite grandement la tâche et remplit à merveille son rôle de Framework: Nous permettre de zoner un peu plus longtemps à côté de la machine à café. :-)

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *