Comment AntiForgeryToken travail
Je suis en essayant de le protéger contre les CSRF et ont deux scenarious:
- POST à partir d'un autre site et il échoue lorsque j'active AntiForgeryToken
- J'ai essayé de mon "malveillant" Javascript (en cours d'exécution sur un autre site) afin de faire d'abord OBTENIR de la page, de l'analyser et d'en extraire RequestVerificationToken et puis faire un POST. Échec également, mais il est clair pour moi pourquoi?
Quelqu'un peut-il expliquer pourquoi?
- Ce site est utile d'informations et de détails: Prévenir le Cross-Site Request Forgery (CSRF) à l'aide de ASP.NET MVC est AntiForgeryToken() helper
Vous devez vous connecter pour publier un commentaire.
Pour des raisons de sécurité, vous ne pouvez pas récupérer le contenu d'un autre domaine à l'aide d'AJAX.
Par conséquent, les autres sites ne peuvent pas obtenir votre jeton.
Voici un bon tutoriel sur CSRF:
http://youtu.be/vrjgD0azkCw
Voici l'essentiel: Vous êtes connecté à votre site web de la banque. Votre banque met un cookie sur votre ordinateur de sorte qu'il peut vous authentifier. Chaque fois que vous faites une demande pour (ie. charger une page à partir de) yourbank.com le navigateur envoie le cookie au serveur web et le code sur le serveur web vérifie que le cookie assurez-vous que vous êtes authentifié. Grand.
Cependant, même si le cookie n'a pas encore expiré, vous vérifiez votre e-mail et ouvrir un e-mail à partir d'un Prince Nigérian vous demandant de cliquer sur un lien. Vous cliquez sur celui-ci (qui peut résister) et au lieu de vous prendre à la page le Prince l'a décrit, le lien vous amène à cette URL:
http://yourbank.com/transfer.aspx?amt=1000000&de=myAccount&to=princeAccount
Parce que vous êtes déjà authentifié auprès de votre banque (par le biais du cookie), il pense que vous êtes en train de demander de transférer de l'argent, donc il le fait.
C'est évidemment un peu un exemple artificiel, mais il obtient le point à travers. De façon plus réaliste, le lien peut présenter une demande de modifications de votre adresse e-mail sur un forum de site web qui vous appartiennent ou quelque chose, de sorte qu'ils peuvent y avoir accès.
Alors MAINTENANT, pour répondre à votre question précise:
Une manière de lutter contre ce (utilisé par Ruby et .NET et autres) est à inclure un anti-faux-jeton. Fondamentalement, lorsque vous demandez une page, le serveur comprend un champ caché avec une valeur chiffrée. Et lorsque vous soumettez le formulaire, le site ressemble à le cookie afin de s'assurer que vous êtes authentifié, mais il se penche également sur la valeur chiffrée que le navigateur envoie et assurez-vous qu'il est valide. Le jeton chiffré de façon réaliste, être un identifiant de session de votre compte est lié à l'. Si le serveur voit le cookie permet de vous identifier en tant qu'utilisateur 123, puis vérifie la forme cryptée de terrain jeton, décrypte la valeur et permet de s'assurer que non chiffrée de la valeur correspond à votre session d'utilisateur ou id ou quelque chose. Si elle le fait, il sait à procéder.
Le prince Nigérian qui vous a envoyé le lien ne savez pas ce que votre id de session est, et même s'il le faisait, il ne serait pas en mesure de chiffrer avec la même clé et d'un algorithme que le site utilise.
Et là vous l'avez. Contrecarrer les Nigérians princes un anti-faux-jeton à la fois.
(Rien contre le Nigeria ou les Nigérians ici. Je suis sûr qu'ils sont des gens adorables. C'est juste leurs princes, se comportent parfois un peu mal.) 🙂