JavaScript doit avoir accès à 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: 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, ce qui 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] L'
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 qu' 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: Ah, apparemment, les deux sites sont des faux, c'est réellement un bug dans FireFox. IE6 et 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.