web-dev-qa-db-fra.com

Comment lire un cookie http uniquement en utilisant JavaScript

Est-il possible de lire un cookie sécurisé avec javascript? J'ai essayé de le faire en utilisant document.cookie et autant que je peux voir ici http://securitymusings.com/article/909/secure-cookies-the-httponly-flag Je ne peux pas accéder à un site sécurisé cookie de cette façon.

Quelqu'un peut-il m'offrir une solution de contournement?

73
tzam

Différents navigateurs activez différentes mesures de sécurité lorsque l'indicateur HTTPOnly est défini. Par exemple Opera et Safari n'empêchent pas l'écriture de javascript sur le cookie. Toutefois, la lecture est toujours interdite sur la dernière version de tous les principaux navigateurs.

Mais plus important encore pourquoi voulez-vous lire un cookie HTTPOnly? Si vous êtes développeur, désactivez simplement le drapeau et assurez-vous que testez votre code pour xss . Je vous recommande d'éviter de désactiver ce drapeau si possible. Les indicateurs HTTPOnly et "indicateur sécurisé" (qui force l'envoi du cookie via https) doivent toujours être définis.

Si vous êtes un attaquant, alors vous voulez pirater une session . Mais il existe un moyen simple de détourner une session malgré le drapeau HTTPOnly. Vous pouvez toujours participer à la session sans connaître son identifiant. Le MySpace Samy worm a fait exactement cela. Il a utilisé un XHR pour lire un jeton CSRF , puis exécuter une tâche autorisée. Par conséquent, l'attaquant pourrait faire presque tout ce que l'utilisateur connecté pourrait faire.

Les gens ont trop confiance dans le drapeau HTTPOnly, XSS peut toujours être exploitable. Vous devez installer des barrières autour des fonctionnalités sensibles. Tels que le mot de passe de changement déposé devrait nécessiter le mot de passe actuel. La capacité d'un administrateur à créer un nouveau compte nécessite un captcha, qui est un technique de prévention CSRF qui ne peut pas être facilement contourné avec un XHR =.

97
rook

L'intérêt des cookies HttpOnly est qu'ils ne sont pas accessibles via JavaScript.

La seule façon (sauf pour exploiter les bogues du navigateur) de votre script de les lire est d’avoir un script coopérant sur le serveur qui lira la valeur du cookie et le renverra dans le contenu de la réponse. Mais si vous le pouvez et si vous le feriez, pourquoi utiliser les cookies HttpOnly en premier lieu?

40
Ilmari Karonen