⚠️ 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.
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.
Validation du jeton CSRF
En ajoutant l'attribut [ValidateAntiForgeryToken]
à l'action concernée du contrôleur, on prévient les attaques de type CSRF:
// 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
!
Bref, assurez-vous de valider le jeton lors des requêtes en provenance de formulaires!