web-dev-qa-db-fra.com

comment ASP.NET valide le jeton anti-contrefaçon

Je me demande comment ASP.NET vérifie si un jeton anti-contrefaçon est valide ou non? Comme où ASP.NET stocke-t-il ces jetons? Et comment sont-ils stockés?

18
Steve

La version courte est qu'un jeton généré est stocké à 2 endroits: (a) cookie (b) valeur de forme cachée. Lorsque le formulaire est soumis, ces 2 valeurs sont comparées l'une à l'autre pour déterminer si elles sont valides. Pour en savoir plus:

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery- (csrf) -attackshttp: // www. codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

25
TeamTam

Une explication par étapes qui est plus claire que la réponse acceptée à mon humble avis (de https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request- faux-attaques-csrf )

  1. Le client demande une page HTML contenant un formulaire.
  2. Le serveur inclut deux jetons dans la réponse. Un jeton est envoyé sous forme de cookie. L'autre est placé dans un champ de formulaire masqué. Les jetons sont générés de manière aléatoire afin qu'un adversaire ne puisse pas deviner les valeurs.
  3. Lorsque le client soumet le formulaire, il doit renvoyer les deux jetons au serveur. Le client envoie le jeton de cookie en tant que cookie, et il envoie le jeton de formulaire à l'intérieur des données du formulaire. (Un client navigateur le fait automatiquement lorsque l'utilisateur soumet le formulaire.)
  4. Si une demande n'inclut pas les deux jetons, le serveur rejette la demande.
14
Chiel ten Brinke

La description ci-dessus n'est pas tout ce qui est fait, dans le cas d'AjaxRequest, l'antiforgery, en particulier dans les requêtes get, n'enverra généralement pas le formulaire avec la valeur cachée pour comparaison, au lieu de cela, vous devrez définir une valeur d'en-tête avec le même contenu du cookie via javascript .. le nom d'en-tête que vous devez définir est par défaut l'en-tête X-XRF-Token [lié aux angularjs] ... bien sûr, vous devrez désactiver CORS ou l'activer uniquement pour des domaines spécifiques afin de protéger les API, SAMEORIGIN doivent également être définis pour éviter le détournement de clics.

4
Ibrahim Magdy