2010-07-29 125 views
6

假設有一個網站foo.com,它從網站bar.com載入JavaScript。現在,說網站bar.com的JavaScript嘗試使用document.cookies來讀取cookie。我的印象是使用JavaScript,您可以閱讀瀏覽器中設置的所有Cookie,而不管它們的來源。但事實證明,來自網站bar.com的JavaScript只能訪問由bar.com設置的cookie,而不是任何其他cookie。如果是這種情況,那麼腳本注入攻擊如何進行cookie竊取?JavaScript和第三方Cookie

回答

5

但事實證明,來自網站bar.com的JavaScript只能訪問由bar.com設置的cookies,而不能訪問任何其他cookie。

這是不正確的。重要的是包含<script>元素的HTML文檔的位置,而不是在src屬性中提到的<script>提到的JS文件的URL。

我懷疑你的問題是,你正在訪問document.cookies當屬性被稱爲document.cookie奇異!

+0

這也是CDN的工作方式,就像本站加載的jQuery腳本一樣:'http:// ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js' does not活在域名'stackoverflow.com'上。 – 2010-07-29 14:45:55

+0

@David,在輸入問題時,cookie是拼寫錯誤。我剛剛嘗試alert(document.cookie),儘管設置了cookie,但我只是得到一個空字符串。我很困惑。 – roger 2010-07-29 14:59:31

+0

我做了一個測試。該域名沒有任何不同。也許您試圖獲取的Cookie位於不同的路徑上,或者僅設置爲HTTP。 – Quentin 2010-07-29 15:26:34

3

他們加載腳本裏面的被攻擊的頁面。

例如,當博客系統中的評論遭到破壞時,它們會包含一個script元素,該元素在頁面呈現時執行。該腳本可以獲取cookie並將其發送給攻擊者的服務器。

這就是爲什麼你應該永遠信任用戶的輸入,並在註釋中不允許至少某些標籤(或翻譯每<&lt;)。但是不要在客戶端這樣做,因爲這種預防技術很容易被繞開;測試(和更改)服務器端的惡意輸入。

3

您只能在已經設定爲給定的域名訪問的cookies。從Wikipedia article on cookies

旁名稱/值對,一個cookie 還可包含過期日期,一個 路徑,一個域名和 cookie是否僅用於加密 連接。 RFC 2965要求cookie 有一個版本號,但這通常是 省略。這些數據段 遵循name = newvalue對,並且用分號分隔 。例如, cookie可以由服務器 通過發送一行Set-Cookie創建: name = newvalue;到期日期=;路徑= /; domain = .example.org。

域和 路徑告訴該cookie 必須發送回服務器瀏覽器的時候 請求給定域和 路徑的網址。如果未指定,則會將 默認爲請求的對象 的域和路徑。因此, 域名和路徑字符串可能會告訴 瀏覽器發送Cookie,而其中的 通常不會。對於安全性 的原因,如果服務器是由域字符串指定的域名 的成員,則Cookie僅被接受 。

如果foo.com發送cookie其中有中bar.com域名,甚至.com,然後JavaScript代碼bar.com可以讀取該cookie。但是,大多數瀏覽器被配置爲只在域名匹配時才接受cookie,並且會拒絕這樣的cookie。

+0

我確認cookie存在,但JavaScript無法讀取它。 – roger 2010-07-29 15:00:58