web-dev-qa-db-fra.com

Puis-je empêcher les attaques CSRF en utilisant localStorage / SessionStorage?

J'ai une application avant/arrière qui doit être connectée pour être utilisée. Lorsque je me connecte (au moyen de l'application frontale envoyant une demande à l'arrière-plan), ce que je fais, c'est d'envoyer un cookie, mais un JSON avec un jeton dedans. Ce dernier sera stocké par l'application frontale dans un sessionstorage et chaque fois qu'il interagira avec l'arrière-plan, il enverra une demande avec le jeton stocké dans le sessionstorage. L'arrière-plan vérifiera la validité du jeton.

Pensez-vous que cette solution est CSRF en sécurité? Voyez-vous d'autres vulnérabilités que je ne considère pas/ignorer?

7
Bertuz

C'est certainement plus sûr que d'utiliser un cookie lorsqu'il s'agit de CSRF, mais il est moins sûr en ce qui concerne les XSS, car le stockage de la session peut être lu à partir de JavaScript, tandis que les cookies HTTP ne peuvent pas.
[.____] Cela dépend donc de la confiance de votre protection contre les XSS.

Si vous allez faire pour cette approche, je suggérerais d'utiliser l'en-tête d'autorisation avec le schéma de porteur.

Authorization: Bearer <token>

Autres choses à garder à l'esprit:

  • Le stockage de la session n'est pas partagé entre les onglets.
  • Vous ne pouvez pas utiliser cette méthode pour des images nécessitant une authentification. Pour ceux que vous pouvez toujours utiliser un cookie (assurez-vous simplement d'ignorer le cookie pour tous les autres points d'extrémité et éventuellement limiter le chemin du coïncident à un chemin sous lequel seules les images sont trouvées)
5
Bart van Wissen