Qu'est ce qu'un jeton CSRF ? Quelle est son importance et comment ça fonctionne?
Je suis en train d'écrire une application (Django, il se trouve) et je veux juste une idée de ce que fait un "jeton CSRF" est et comment il protège les données. Est le post de données pas sûr si vous n'utilisez pas les jetons CSRF?
- C'est un secret, spécifiques à l'utilisateur de jeton dans toutes les soumissions de formulaire et des effets secondaires Url pour éviter Cross-Site Request Forgeries. Plus d'infos ici: en.wikipedia.org/wiki/Cross-site_request_forgery
- semble comme il ya une ligne fine entre la protection de la question et l'interdire d'être trop large 😀
- À partir de OWASP Cross-Site Request Forgery (CSRF) Prévention de la Feuille de Triche: "Cross-Site Scripting n'est pas nécessaire pour CSRF de travail. Cependant, tout cross site scripting vulnerability peuvent être utilisées pour vaincre tous les CSRF techniques d'atténuation [...].C'est parce qu'un XSS charge utile peut simplement lire une page sur le site à l'aide d'un XMLHttpRequest [...]. Il est impératif qu'aucune faille XSS sont présents pour s'assurer que CSRF les défenses ne peuvent pas être contournées."
Vous devez vous connecter pour publier un commentaire.
Cross-Site Request Forgery (CSRF) dans des mots simples
www.mybank.com
mybank.com
entraînera une demande de (conceptuellement) la formehttp://www.mybank.com/transfer?to=<SomeAccountnumber>;amount=<SomeAmount>
. (Votre numéro de compte n'est pas nécessaire, car il est sous-entendu par votre login.)www.cute-cat-pictures.org
, ne sachant pas que c'est un site malveillant.mybank.com
(nécessite un peu de chance!), ils pourraient inclure sur leur page une demande commehttp://www.mybank.com/transfer?to=123456;amount=10000
(où123456
est le nombre de leurs Îles Caïmans compte et10000
est un montant que vous avez déjà pensé que vous étiez heureux à posséder).www.cute-cat-pictures.org
page, donc votre navigateur en faire la demande.www.mybank.com
cookie et il l'air parfaitement légitime. Il y va de votre argent!C'est le monde sans jetons CSRF.
Maintenant, pour le meilleur avec jetons CSRF:
http://www.mybank.com/transfer?to=123456;amount=10000;token=31415926535897932384626433832795028841971
.mybank.com
inclure sur leur propre page web quand ils servent à vous. Il est différents chaque fois qu'ils se servir de n'importe quelle page de n'importe qui.www.mybank.com
.Résultat: Vous gardez votre
10000
unités monétaires. Je vous suggère de faire un don pour Wikipédia.(Votre kilométrage peut varier.)
ÉDITION de commentaire la peine de lire:
Il serait utile de noter que le script de
www.cute-cat-pictures.org
n'a normalement pas accès à votre anti-CSRF token dewww.mybank.com
en raison de HTTP de contrôle d'accès. Cette remarque est importante pour certaines personnes qui déraisonnable d'envoyer un en-têteAccess-Control-Allow-Origin: *
pour chaque site web de la réponse, sans savoir ce qu'elle est, tout simplement parce qu'ils ne peuvent pas utiliser l'API à partir d'un autre site web.www.cute-cat-pictures.org
n'a normalement pas accès à votre anti-CSRF token dewww.mybank.com
en raison de HTTP de contrôle d'accès. Cette remarque est importante pour certaines personnes qui déraisonnable d'envoyer un en-têteAccess-Control-Allow-Origin: *
pour chaque site web de la réponse, sans savoir ce qu'elle est, tout simplement parce qu'ils ne peuvent pas utiliser l'API à partir d'un autre site web.www.cute-cat-pictures.org
de ramperwww.mybank.com
et obtenir le jeton CSRF là? Je veux dire, n'est-il pas utile uniquement pour les pages derrière un login?Access-Control-Allow-Origin
, je n'ai pas à vous soucier de jeton csrf?You retrieved that www.cute-cat-pictures.org page, so your browser will make that request.
, voulez-vous dire de lamybank.com
page pour afficher un lien vers lewww.cute-cat-pictures.org
page? le lien est dans lemybank.com
?mybank.com
est la plus grande banque, donc hors de tous les 10 000 personnes qui visitent moncute-cat-pictures
, environ 500mybank
clients -- et si je suis un peu de chance, 5 d'entre eux vont être connecté pourmybank
à l'époque. Voyons voir..."just because they can't use the API from another website.
Access-Control-Allow-Origin
got to do with it? Il ne sera pas permettre l'extraction de l'jeton CSRF.Oui, le post données sont en sécurité. Mais l'origine de ces données n'est pas. De cette façon, quelqu'un peut tromper l'utilisateur avec JS en vous connectant à votre site, alors que la navigation de l'attaquant de la page web.
Afin d'éviter que, django va envoyer une clé aléatoire à la fois dans le cookie, et les données de formulaire.
Ensuite, lorsque les utilisateurs de Postes, il va vérifier si les deux touches sont identiques. Dans le cas où l'utilisateur est trompé, 3e partie du site web ne peuvent pas obtenir les cookies de votre site, provoquant ainsi le auth erreur.
Le site génère un jeton unique s'il en fait la page de formulaire. Ce jeton est obligatoire pour déposer/récupérer des données sur le serveur.
Depuis le jeton est généré par votre site et fournis uniquement lorsque la page avec le formulaire est généré, un autre site ne peut pas imiter vos formes, ils n'ont pas le jeton et donc ne pouvez pas poster de votre site.
Le Cloud Sous blog a une bonne explication de jetons CSRF.
La racine de tout cela est de s'assurer que les demandes sont à venir de la réalité des utilisateurs du site. Un jeton csrf est généré pour les formes et Doit être lié à l'utilisateur des séances. Il est utilisé pour envoyer des requêtes au serveur, dans lequel le jeton valide eux. C'est une façon de se protéger contre les csrf, une autre serait de vérifier le référent de l'en-tête.