JavaScript deve accedere ai cookie se AJAX viene utilizzato su un sito con restrizioni di accesso basate sui cookie. I cookie HttpOnly funzioneranno su un sito AJAX?
Modifica: Microsoft ha creato un modo per prevenire gli attacchi XSS impedendo l'accesso JavaScript ai cookie se viene specificato HttpOnly. FireFox ha successivamente adottato questo. Quindi la mia domanda è: se stai usando AJAX su un sito, come StackOverflow, i cookie solo HTTP sono un'opzione?
Modifica 2: Domanda 2. Se lo scopo di HttpOnly è impedire l'accesso JavaScript ai cookie e puoi ancora recuperare i cookie tramite JavaScript tramite l'oggetto XmlHttpRequest, qual è lo scopo di HttpOnly ?
Modifica 3: Ecco una citazione da Wikipedia:
Quando il browser riceve un cookie di questo tipo, dovrebbe usarlo normalmente nei seguenti scambi HTTP, ma non per renderlo visibile agli script lato client. [32] Il
HttpOnly
flag non fa parte di alcuno standard e non è implementato in tutti i browser. Si noti che al momento non è possibile prevenire la lettura o la scrittura del cookie di sessione tramite XMLHTTPRequest. [33].
Capisco che document.cookie
è bloccato quando si utilizza HttpOnly. Ma sembra che puoi ancora leggere i valori dei cookie nell'oggetto XMLHttpRequest, consentendo XSS. In che modo HttpOnly ti rende più sicuro di? Producendo cookie essenzialmente di sola lettura?
Nel tuo esempio, non posso scrivere sul tuo document.cookie
, ma posso ancora rubare il tuo cookie e pubblicarlo sul mio dominio usando l'oggetto 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>
Modifica 4: Scusa, intendevo inviare XMLHttpRequest al dominio StackOverflow, quindi salvare il risultato di getAllResponseHeaders () in una stringa, regex il cookie e quindi pubblicarlo su un dominio esterno. Sembra che Wikipedia e ha.ckers concordino con me su questo, ma mi piacerebbe essere rieducato ...
Modifica finale: Ahh, a quanto pare entrambi i siti sono sbagliati, questo è in realtà un bug in FireFox . IE6 e 7 sono in realtà gli unici browser che attualmente supportano completamente HttpOnly.
Per ribadire tutto ciò che ho imparato:
- HttpOnly limita tutti gli accessi a document.cookie in IE7 e FireFox (non sono sicuro di altri browser)
- HttpOnly rimuove le informazioni sui cookie dalle intestazioni di risposta in XMLHttpObject.getAllResponseHeaders () in IE7.
- XMLHttpObjects può essere inviato solo al dominio da cui ha origine, quindi non esiste alcuna pubblicazione interdominio dei cookie.
modifica: è probabile che queste informazioni non siano più aggiornate.