Comment faire des cookies HttpOnly travailler avec des requêtes AJAX?

JavaScript besoin d'accéder à des cookies si l'AJAX est utilisé sur un site avec des restrictions d'accès basés sur les cookies. Sera des cookies HttpOnly travailler sur un site en AJAX?

Edit: Microsoft a créé un moyen pour empêcher les attaques XSS en interdisant les accès JavaScript pour les cookies si HttpOnly est spécifié. FireFox plus tard adopté le présent. Donc ma question est: Si vous êtes en utilisant AJAX sur un site, comme StackOverflow, sont Http Uniquement des cookies une option?

Edit 2: La Question 2. Si le but de HttpOnly est pour éviter le JavaScript accès aux cookies, et vous pouvez toujours récupérer les cookies par l'intermédiaire de JavaScript via l'Objet XmlHttpRequest, quel est le point de HttpOnly?

Edit 3: Voici une citation de Wikipedia:

Lorsque le navigateur reçoit un cookie, il est censé l'utiliser comme d'habitude dans la suivante HTTP échanges, mais de ne pas la rendre visible pour les scripts côté client.[32] Le HttpOnly drapeau ne fait partie d'aucun standard, et n'est pas mis en œuvre dans tous les navigateurs. Notez qu'il n'existe actuellement pas de la prévention de la lecture ou de l'écriture, le cookie de session par l'intermédiaire d'un XMLHTTPRequest. [33].

Je comprends que document.cookie est bloqué lorsque vous utilisez HttpOnly. Mais il semble que vous pouvez toujours lire les valeurs de cookie dans l'objet XMLHttpRequest, permettant XSS. Comment HttpOnly vous rendre plus sûrs que? Par la fabrication de biscuits, essentiellement en lecture seule?

Dans votre exemple, je ne peux pas écrire à votre document.cookie, mais je peux encore voler votre cookie et de le poster à mon domaine en utilisant l'objet XMLHttpRequest.

<script type="text/javascript">
    var req = null;
    try { req = new XMLHttpRequest(); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
    req.open('GET', 'http://stackoverflow.com/', false);
    req.send(null);
    alert(req.getAllResponseHeaders());
</script>

Edit 4: Désolé, je voulais dire que vous pouvez envoyer à la XMLHttpRequest pour la StackOverflow domaine, puis enregistrer le résultat de getAllResponseHeaders() pour une chaîne regex le cookie, et puis après, qu'à un domaine externe. Il semble que Wikipédia et ha.ckers d'accord avec moi sur ce point, mais j'aimerais être rééduqués...

Final Edit: Ahh, apparemment, les deux sites sont des faux, c'est en fait une bug dans FireFox. IE6 & 7 sont en fait les seuls navigateurs qui actuellement entièrement en charge HttpOnly.

À rappeler tout ce que j'ai appris:

  • HttpOnly limite tous les accès au document.cookie dans IE7 & et FireFox (je ne sais pas sur les autres navigateurs)
  • HttpOnly supprime les informations de cookie de les en-têtes de réponse dans XMLHttpObject.getAllResponseHeaders() dans IE7.
  • XMLHttpObjects ne peuvent être présentées pour le domaine de l'origine, donc il n'y a pas de contre-domaine de l'affichage de l'cookies.

edit: Cette information est probablement pas à jour.

  • J'ai jeté votre exemple dans un script greasemonkey et il semble que FF n'affiche plus les cookies. L'excellence de la recherche et de l'exemple.
  • Peut-être avec la Même Origine, vous ne pouvez pas faire une requête http à un domaine qui n'est pas le même que le script est en cours d'exécution; toutefois, je crois que vous pourriez facilement passer les cookies en redirigeant l'utilisateur vers une page à l'aide de la fenêtre.emplacement et de transmettre toutes les informations par le biais de paramètres de chaîne de requête.
  • ne peut pas faire une requête http à un domaine qui n'est pas le même que le script est en cours d'exécution dans" dites-vous qu'un site X ne peut pas inclure une image à partir de l'hôte Y? (une fonctionnalité qui a été pris en charge par tous les navigateurs depuis Mosaïque?)
InformationsquelleAutor Shawn | 2008-08-26