JavaScript doit avoir accès aux cookies si AJAX est utilisé sur un site avec des restrictions d'accès basées sur les cookies. Les cookies HttpOnly fonctionneront-ils sur un site AJAX?
Modifier: Microsoft a créé un moyen de prévenir les attaques XSS en interdisant l'accès JavaScript aux cookies si HttpOnly est spécifié. FireFox l'a ensuite adopté. Ma question est donc la suivante: si vous utilisez AJAX sur un site, comme StackOverflow, les cookies Http-Only sont-ils une option?
Edit 2: Question 2. Si le but de HttpOnly est d'empêcher l'accès JavaScript aux cookies et que vous pouvez toujours récupérer les cookies via JavaScript via l'objet XmlHttpRequest, quel est l'intérêt de HttpOnly ?
Edit 3: Voici une citation de Wikipedia:
Lorsque le navigateur reçoit un tel cookie, il est censé l'utiliser comme d'habitude dans les échanges HTTP suivants, mais pas pour le rendre visible aux scripts côté client. [32] Le
HttpOnly
drapeau ne fait partie d'aucune norme et n'est pas implémenté dans tous les navigateurs. Notez qu'il n'y a actuellement aucune prévention de lecture ou d'écriture du cookie de session via une requête XMLHTTPRequest. [33].
Je comprends que cela document.cookie
est bloqué lorsque vous utilisez HttpOnly. Mais il semble que vous puissiez toujours lire les valeurs des cookies dans l'objet XMLHttpRequest, permettant XSS. Comment HttpOnly vous rend-il plus sûr que? En rendant les cookies essentiellement en lecture seule?
Dans votre exemple, je ne peux pas écrire sur votre document.cookie
, mais je peux toujours voler votre cookie et le publier sur mon domaine à l'aide de 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 pouviez envoyer XMLHttpRequest au domaine StackOverflow, puis enregistrer le résultat de getAllResponseHeaders () dans une chaîne, regexer le cookie, puis le publier dans un domaine externe. Il semble que Wikipedia et ha.ckers soient d'accord avec moi sur celui-ci, mais j'aimerais être rééduqué ...
Édition finale: Ahh, apparemment les deux sites ont tort, c'est en fait un bug dans FireFox . IE6 et 7 sont en fait les seuls navigateurs qui prennent actuellement pleinement en charge HttpOnly.
Pour répéter tout ce que j'ai appris:
- HttpOnly restreint tout accès à document.cookie dans IE7 et FireFox (pas sûr des autres navigateurs)
- HttpOnly supprime les informations de cookie des en-têtes de réponse dans XMLHttpObject.getAllResponseHeaders () dans IE7.
- XMLHttpObjects ne peut être soumis qu'au domaine d'où ils proviennent, il n'y a donc pas de publication inter-domaines des cookies.
modifier: Ces informations ne sont probablement plus à jour.