Comment lire un cookie HttpOnly à l'aide de JavaScript

90

Existe-t-il un moyen de lire un cookie sécurisé avec JavaScript?
J'ai essayé de le faire en utilisant document.cookieet 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?

tzam
la source
1
Depuis le wiki : Un cookie sécurisé n'est utilisé que lorsqu'un navigateur visite un serveur via HTTPS.
Pavel Hodek
6
@ Pavel Hodek Ce n'est pas le bon drapeau. 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.
tour
1
Le titre de ces questions doit être modifié pour inclure l'indicateur "HttpOnly". Dans l'état actuel des choses, il semble que la question porte sur le drapeau "Sécurisé".
Tom

Réponses:

126

Différents navigateurs activent différentes mesures de sécurité lorsque l' indicateur HTTPOnly est défini. Par exemple, Opera et Safari n'empêchent pas 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 HTTPOnlycookie? 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 dans la mesure du possible. L' HTTPOnlyindicateur et «l'indicateur sécurisé» (qui force l'envoi du cookie via https) doivent toujours être définis.

Si vous êtes un attaquant , vous souhaitez détourner une session . Mais il existe un moyen simple de détourner une session malgré le HTTPOnlydrapeau. Vous pouvez toujours suivre la session sans connaître l'identifiant de session. Le ver MySpace Samy a fait exactement cela. Il a utilisé un XHR pour lire un jeton CSRF , puis 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 HTTPOnlydrapeau, 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 exiger le mot de passe actuel. La capacité d'un administrateur à créer un nouveau compte devrait nécessiter un captcha, qui est une technique de prévention CSRF qui ne peut pas être facilement contournée avec un XHR .

tour
la source
Pourriez-vous s'il vous plaît élaborer sur la chose du ver? Ce lien ne fonctionne pas et ne comprenait pas vraiment grand-chose d'Internet. Merci.
Abhishek Jebaraj
@Abhishek Jebaraj Si vous ne comprenez pas le ver sammy ou les jetons CSRF, essayez d'abord de comprendre les limites de la politique de même origine
tour
je veux obtenir la date d'expiration d'un cookie http uniquement, comment faire
PirateApp
50

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

La seule façon (sauf pour exploiter les 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 rejoindra dans le cadre du contenu de la réponse. Mais si vous pouvez et voulez faire cela, pourquoi utiliser les cookies HttpOnly en premier lieu?

Ilmari Karonen
la source
Vous voudrez peut-être le tester pour savoir si le navigateur de l'utilisateur gère correctement HttpOnly pour les cookies avant d'autoriser l'utilisateur à utiliser votre site à partir du navigateur particulier. Je recherche un exemple qui puisse assurer le support du navigateur du drapeau HttpOnly. MS conseille également de le faire, mais il n'y a pas d'autres conseils sur la façon: Atténuer XSS avec HttpOnly
Ursegor
J'ai trouvé qu'ils conseillaient la liste blanche de la version du navigateur. Je me trompe peut-être, mais ne serait-ce pas un moyen pratique de vérifier la prise en charge de javascript à la place? Pourriez-vous suggérer des drawbaks à ce sujet?
Ursegor
-7

L'un des moyens consiste à utiliser l'inspecteur Web Safari, et dans l'onglet de stockage, vous pouvez voir tous les cookies, httpSeulement ou non, et sélectionnez simplement le cookie Commande + C pour le copier.

Une fois que vous avez la chaîne, vous pouvez facilement l'analyser avec n'importe quel analyseur de cookie ou javascript simple.

entrez la description de l'image ici

pankajdoharey
la source
1
FF et Chrome peuvent également le faire. Ce n'est pas la même chose que souhaite OP.
imba-tjd
@ imba-tjd Eh bien, vous avez raison, mais j'utilisais Safari à l'époque, alors je pourrais simplement en témoigner.
pankajdoharey
C'est comme si vous répondiez à quelqu'un qui demande "Comment puis-je obtenir une entrée utilisateur" avec, "Il suffit de leur demander et de le définir dans votre code".
forumulator le