JavaScript benötigt Zugriff auf Cookies, wenn AJAX auf einer Website mit Zugriffsbeschränkungen basierend auf Cookies verwendet wird. Funktionieren HttpOnly-Cookies auf einer AJAX-Site?
Bearbeiten: Microsoft hat eine Möglichkeit geschaffen, XSS-Angriffe zu verhindern, indem der JavaScript-Zugriff auf Cookies nicht zugelassen wird, wenn HttpOnly angegeben ist. FireFox hat dies später übernommen. Meine Frage lautet also: Wenn Sie AJAX auf einer Site wie StackOverflow verwenden, sind nur HTTP-Cookies eine Option?
Bearbeiten 2: Frage 2. Wenn der Zweck von HttpOnly darin besteht, den JavaScript-Zugriff auf Cookies zu verhindern, und Sie die Cookies weiterhin über JavaScript über das XmlHttpRequest-Objekt abrufen können, wozu dient HttpOnly ?
Edit 3: Hier ist ein Zitat aus Wikipedia:
Wenn der Browser ein solches Cookie empfängt, soll er es wie gewohnt in den folgenden HTTP-Austauschen verwenden, es jedoch nicht für clientseitige Skripte sichtbar machen. [32] Das
HttpOnly
Flag ist nicht Teil eines Standards und nicht in allen Browsern implementiert. Beachten Sie, dass das Lesen oder Schreiben des Sitzungscookies über eine XMLHTTPRequest derzeit nicht verhindert wird. [33].
Ich verstehe, dass dies document.cookie
blockiert ist, wenn Sie HttpOnly verwenden. Es scheint jedoch, dass Sie weiterhin Cookie-Werte im XMLHttpRequest-Objekt lesen können, wobei XSS berücksichtigt wird. Wie macht HttpOnly Sie sicherer als? Indem Cookies im Wesentlichen schreibgeschützt sind?
In Ihrem Beispiel kann ich nicht an Ihre schreiben document.cookie
, aber ich kann Ihr Cookie trotzdem stehlen und es mithilfe des XMLHttpRequest-Objekts in meiner Domain veröffentlichen.
<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>
Bearbeiten 4: Entschuldigung, ich meinte, Sie könnten die XMLHttpRequest an die StackOverflow-Domäne senden und dann das Ergebnis von getAllResponseHeaders () in einer Zeichenfolge speichern, das Cookie neu ausdrücken und dann an eine externe Domäne senden. Es scheint, dass Wikipedia und ha.ckers mir in diesem Punkt zustimmen, aber ich würde gerne umerzogen werden ...
Letzte Änderung: Ahh, anscheinend sind beide Seiten falsch, dies ist tatsächlich ein Fehler in FireFox . IE6 & 7 sind derzeit die einzigen Browser, die HttpOnly vollständig unterstützen.
Um alles zu wiederholen, was ich gelernt habe:
- HttpOnly beschränkt den Zugriff auf document.cookie in IE7 & und FireFox (bei anderen Browsern nicht sicher).
- HttpOnly entfernt Cookie-Informationen aus den Antwortheadern in XMLHttpObject.getAllResponseHeaders () in IE7.
- XMLHttpObjects dürfen nur an die Domain gesendet werden, von der sie stammen, sodass die Cookies nicht domänenübergreifend veröffentlicht werden.
Bearbeiten: Diese Informationen sind wahrscheinlich nicht mehr aktuell.