如果在基於cookie的訪問限制的站點上使用AJAX,則JavaScript需要訪問cookie。 HttpOnly cookie會在AJAX網站上運行嗎?HttpOnly Cookie如何處理AJAX請求?
編輯:如果指定了HttpOnly,Microsoft創建了一種防止XSS攻擊的方法,即禁止JavaScript訪問cookie。 FireFox後來採納了這一點。所以我的問題是:如果您在站點上使用AJAX,比如StackOverflow,Http專用Cookie是一個選項嗎?
編輯2:問題2.如果僅Http的目的是爲了防止JavaScript的訪問餅乾,你仍然可以通過XMLHttpRequest對象檢索通過JavaScript的餅乾,什麼的HttpOnly點?
編輯3:下面是來自維基百科報價:
當瀏覽器接收到這樣一個cookie,它應該在以下的HTTP交流,使用它像往常一樣,但不使其可見到客戶端腳本。[32]
HttpOnly
標誌不是任何標準的一部分,並沒有在所有瀏覽器中實現。請注意,目前沒有通過XMLHTTPRequest來讀取或寫入會話cookie的預防。 [33]。
我知道document.cookie
在使用HttpOnly時被阻止。但似乎你仍然可以讀取XMLHttpRequest對象中的cookie值,從而允許XSS。 HttpOnly如何讓你更安全?通過使cookie基本上只讀?
在您的示例中,我無法寫入document.cookie
,但我仍然可以竊取您的Cookie並使用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>
編輯4:對不起,我的意思是,你可以發送了XMLHttpRequest到StackOverflow的域,然後)保存getAllResponseHeaders的結果(爲字符串,正則表達式出來的餅乾,然後張貼到一個外部域。看來,維基百科和ha.ckers我同意就這一個,但我會愛再教育......
最後編輯:啊,顯然這兩個網站都是錯誤的,這其實是一個bug in FireFox。 IE6 & 7實際上是目前完全支持HttpOnly的唯一瀏覽器。
重申一切我已經學會:
- 僅Http限制所有訪問的document.cookie在IE7 &和FireFox(其他瀏覽器不知道)
- 的HttpOnly去除響應標頭中的cookie信息XMLHttpObject.getAllResponseHeaders()在IE7中。
- XMLHttpObjects只能提交給它們的域名,所以沒有跨域發佈cookies。
編輯:此信息可能不再是最新的。
我把你的例子放在一個greasemonkey腳本中,它看起來像FF不再顯示cookie。優秀的研究和範例。 – 2010-07-14 22:09:03
可能具有相同原始策略,您不能向運行腳本的域不同的http請求;不過,我相信你可以通過使用window.location將用戶重定向到一個頁面並通過查詢字符串參數傳遞信息來輕鬆地傳遞cookie。 – 2016-06-09 08:38:29