Je souhaite protéger mon application contre XSRF. Bien que je ne puisse pas vraiment comprendre quel est le problème et comment fonctionne ma solution, après quelques recherches, j'ai trouvé une solution, qui Angular utilise. Pour autant que j'ai obtenu, ma solution nécessite le Etapes suivantes:
X-XSRF-TOKEN
en-tête de ce jeton.Mais je ne sais pas comment cela aide, si j'ai une vulnérabilité XSS, car tout code JavaScript injecté pourrait également faire la même chose. Je veux comprendre le problème et comment une telle solution aide.
Pour info, j'implémente également l'authentification basée sur JWT, en utilisant Redis pour la gestion de session, sur un serveur Express.
Votre plan me semble bien. L'utilisation d'un jeton CSRF est la solution standard à ce type de problème. Mais vous ne devriez pas vous sentir en sécurité simplement parce qu'un inconnu sur Internet vous dit que ça a l'air bien - assurez-vous de comprendre ce que vous faites et pourquoi, sinon vous risquez de faire des erreurs.
(Un point mineur: je ne suis pas sûr que vous ayez besoin de changer le jeton à chaque demande.)
De cette ancienne réponse à moi:
L'agresseur dupe la victime de lui rendre visite
http://evil.com
qui contient un formulaire qui effectue automatiquement un POST tohttp://bank.com/transfer?to=evilHacker&amount=1000000
. Si la victime est déjà connectée à sa banque, le cookie avec l'ID de session sera envoyé comme d'habitude par le navigateur et il n'y a aucun moyen pour le serveur de banque de savoir que la victime n'avait pas réellement l'intention de transférer de l'argent. Notez que cela dépend du navigateur qui envoie le cookie avec l'ID de session àbank.com
.Alors, comment un jeton CSRF peut-il aider? Si la
bank.com
vérifie toujours qu'un jeton aléatoire unique à cette session est présent dans la demande,evil.com
ne peut pas falsifier la demande car le pirate malveillant qui exécute ce site ne sait pas ce qu'est le jeton.
Comme vous le dites dans votre question, cela n'aidera pas s'il existe une vulnérabilité XSS. En fait, il n'y a pas de protection CSRF qui vous aidera dans ce cas, mais si vous êtes vulnérable à XSS, vous avez de plus gros problèmes que les tokens CSRF volés.
La seule chose à faire ici est donc de travailler sur votre protection XSS.