Aller au contenu principal

⚠️ Anti-forgery token

Pour les plus observateurs d'entre vous, si vous avez jeté un œil au HTML généré par le formulaire, vous avez peut-être remarqué un champ input hidden ajouté automatiquement.

img

Il porte le nom de RequestVerificationToken et est un jeton permettant de prévenir ce qu'on appelle Cross-site request forgery (CSRF).

Un site tiers, mal intentionné, pourrait tenter de faire des requêtes POST en votre nom vers un site sur lequel vous êtes connecté et en quelque sorte agir en votre nom.

Pour éviter ce genre d'attaques, un jeton que seul le serveur peut valider est ajouté au formulaire.

En gros, on s'assure de cette façon que la requête provient bel et bien de notre site et non de l'externe.

Par exemple, si je fais une requête POST vers /auth en utilisant Postman, j'aurai un retour 200 OK comme une requête normale si je n'ai pas l'attribut [ValidateAntiForgeryToken] sur l'action de contrôleur.

img

Validation du jeton CSRF

En ajoutant l'attribut [ValidateAntiForgeryToken] à l'action concernée du contrôleur, on prévient les attaques de type CSRF:

Snowfall.Web.Mvc/Controllers/AuthController.cs
// POST /auth
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Authentifier(ConnexionViewModel connexionViewModel)

Si je tente la même requête avec Postman, j'ai maintenant un retour 400 Bad Request!

img

Bref, assurez-vous de valider le jeton lors des requêtes en provenance de formulaires!