144 votes

Comment lire un cookie HttpOnly en utilisant JavaScript ?

Existe-t-il un moyen de lire un cookie sécurisé avec JavaScript ?
J'ai essayé de le faire en utilisant document.cookie et d'après ce que je peux voir sur cet article sur les cookies sécurisés et le drapeau HttpOnly Je ne peux pas accéder à un cookie sécurisé de cette façon.

Quelqu'un peut-il suggérer une solution de contournement ?

1 votes

Desde wiki : Un cookie sécurisé est uniquement utilisé lorsqu'un navigateur visite un serveur via HTTPS.

9 votes

@Pavel Hodek C'est le mauvais indicateur. L'indicateur de cookie "sécurisé" n'a rien à voir avec l'indicateur de sécurité HTTPOnly. Ils ont un système de dénomination horrible.

1 votes

Le titre de cette question devrait être modifié pour inclure le drapeau "HttpOnly". En l'état actuel des choses, il semble que la question porte sur le drapeau "Secure".

181voto

Rook Points 34698

Différents navigateurs activer différentes mesures de sécurité lorsque l'option HTTPOnly est activé. Par exemple, Opera et Safari n'empêchent pas le javascript d'écrire dans le cookie. Cependant, la lecture est toujours interdite sur la dernière version de tous les principaux navigateurs.

Mais plus important encore pourquoi voulez-vous lire un HTTPOnly cookie ? Si vous êtes un développeur, désactivez simplement l'indicateur et assurez-vous de tester votre code pour xss. Je vous recommande d'éviter de désactiver cet indicateur si possible. Le site HTTPOnly et "secure flag" (qui force l'envoi du cookie via https) doivent toujours être activés.

Si vous êtes un attaquant alors vous voulez détourner une session . Mais il existe un moyen facile de détourner une session malgré la HTTPOnly drapeau. Vous pouvez toujours rouler sur la session sans connaître l'identifiant de la session. Le MySpace Ver de terre Samy a fait exactement ça. Il a utilisé un XHR pour lire un CSRF et ensuite effectuer une tâche autorisée. Par conséquent, l'attaquant peut faire presque tout ce que l'utilisateur connecté peut faire.

Les gens ont trop confiance dans le HTTPOnly drapeau, XSS peut toujours être exploitable. Vous devez mettre en place des barrières autour des fonctions sensibles. Par exemple, le fichier de modification du mot de passe doit exiger le mot de passe actuel. La possibilité pour un administrateur de créer un nouveau compte doit nécessiter un captcha, qui est un mot de passe. Technique de prévention CSRF qui ne peut pas être facilement contourné avec un XHR .

71voto

Ilmari Karonen Points 20585

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

La seule façon (à l'exception de l'exploitation des bogues du navigateur) pour votre script de les lire est d'avoir un script coopérant sur le serveur qui lira la valeur du cookie et la renverra comme partie du contenu de la réponse. Mais si vous pouvez et voulez faire cela, pourquoi utiliser des cookies HttpOnly en premier lieu ?

0 votes

Vous pourriez vouloir le tester pour savoir si le navigateur de l'utilisateur gère correctement le HttpOnly pour les cookies avant de permettre à l'utilisateur d'utiliser votre site à partir du navigateur en question. Je suis à la recherche d'un exemple qui puisse garantir la prise en charge du drapeau HttpOnly par le navigateur. MS conseille également de le faire, mais il n'y a pas d'autres conseils sur le comment : Atténuation des XSS avec HttpOnly

0 votes

J'ai trouvé qu'ils conseillent la version navigateur de la liste blanche. Je me trompe peut-être, mais ne serait-il pas plus pratique de vérifier le support à partir de javascript ? Pouvez-vous me suggérer des astuces à ce sujet ?

4voto

Akin Zeman Points 72

Le but des cookies Httponly est d'être inaccessible par script, donc vous NE POUVEZ PAS.

2 votes

Qu'est-ce qui est nouveau ou différent dans votre réponse par rapport à celles qui existent déjà ?

0 votes

Court et facile à lire comme vous l'avez fait.

3 votes

Idem que la première phrase de la réponse précédente : The whole point of HttpOnly cookies is that they can't be accessed by JavaScript.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X