2011-11-09 47 views
50

有沒有什麼方法可以用javascript讀取安全cookie?我試圖用document.cookie來做,並且據我所見http://securitymusings.com/article/909/secure-cookies-the-httponly-flag我無法以這種方式訪問​​安全cookie。如何使用JavaScript讀取安全Cookie

任何人都可以爲我提供解決方法嗎?

+1

來自[wiki](http://en.wikipedia.org/wiki/HTTP_cookie):安全cookie僅在瀏覽器通過HTTPS訪問服務器時使用。 –

+3

@Pavel Hodek這是錯誤的標誌。 「安全」cookie標誌與HTTPOnly安全標誌無關。他們有一個可怕的命名系統。 – rook

回答

68

不同的瀏覽器enable different security measures when the HTTPOnly標誌設置。例如Opera和Safari不會阻止JavaScript寫入cookie。但是,所有主流瀏覽器的最新版本都禁止閱讀。

但更重要的是爲什麼要讀取HTTPOnly cookie?如果您是開發人員,只需禁用該標誌並確保您的test your code for xss。我建議您儘可能避免禁用此標誌。應該始終設置HTTPOnly標誌和「安全標誌」(強制cookie通過https發送)。

如果您是攻擊者,那麼您想要劫持會話。但是,儘管有HTTPOnly標誌,但還是有一種簡單的方法來劫持會話。您仍然可以在不知道會話ID的情況下參加會議。 MySpace Sammy worm就是這麼做的。它使用XHR讀取CSRF令牌,然後執行授權任務。因此,攻擊者幾乎可以做任何記錄用戶可以做的事情。

人們對HTTPOnly標誌過於信任,XSS仍然可以被利用。您應該圍繞敏感功能設置屏障。如更改密碼字段應該要求當前密碼。管理員創建新帳戶的能力應該需要驗證碼,這是一個不容易繞過XHR的CSRF prevention technique

+0

請您詳細說明蠕蟲的事情嗎?該鏈接不起作用,並且從互聯網上也沒有真正理解。謝謝。 –

+0

@Abhishek Jebaraj如果你不瞭解sammy蠕蟲或CSRF標記,那麼先嚐試理解[同源策略]的限制(https://developer.mozilla.org/en-US/docs/Web /安全性/同-origin_policy) – rook

27

HttpOnly cookies的重點在於它們不能被JavaScript訪問。

腳本讀取它們的唯一方法(除了利用瀏覽器錯誤)是在服務器上有一個協作腳本,它將讀取cookie值並將其作爲響應內容的一部分進行回顯。但是如果你能做到這一點,爲什麼首先使用HttpOnly cookie呢?

+0

這應該是一個。 – steo

+0

您可能需要對其進行測試,以確定用戶瀏覽器是否正確處理HttpOnly中的cookies,然後允許用戶從特定瀏覽器使用您的網站。我正在尋找一個可以確保瀏覽器支持HttpOnly標誌的例子。 MS也建議這樣做,但沒有進一步的建議如何:[緩解與HttpOnly XSS](https://msdn.microsoft.com/en-us/library/ms533046.aspx#httponly) – Ursegor

+0

我發現他們建議瀏覽器版本白名單。我可能是錯的,但它不是一個方便的方式來檢查從JavaScript的支持,而不是?你能提出一些關於這個的抽屜嗎? – Ursegor