瀏覽器的同源策略

原因 安全機(jī)制
好處 隔離潛在惡意文件
具體表現(xiàn) 限制資源交互(不同源加載的文檔、腳本)
源的繼承 about:blankwindow.open()執(zhí)行的腳本會(huì)繼承打開(kāi)該 URL 的文檔的源
例外 IE授信范圍(同域名),端口不受限制
子域父域通信 父域和子域中設(shè)置 document.domain 為相同的值



源的定義:

  • (網(wǎng)頁(yè))協(xié)議,端口和域名都相同(IE同域名和端口不遵守)
  • 文件的源定義: URLs.
源的繼承

data:URLs獲得一個(gè)新的,空的安全上下文。
在頁(yè)面中用 about:blank 或 javascript: URL 執(zhí)行的腳本會(huì)繼承打開(kāi)該 URL 的文檔的源,因?yàn)檫@些類(lèi)型的 URLs 沒(méi)有明確包含有關(guān)原始服務(wù)器的信息。

例如,about:blank 通常作為父腳本寫(xiě)入內(nèi)容的新的空白彈出窗口的 URL(例如,通過(guò) Window.open() 機(jī)制)。 如果此彈出窗口也包含代碼,則該代碼將繼承與創(chuàng)建它的腳本相同的源。data: URL會(huì)得到一個(gè)新的空的安全上下文

注意:在Gecko 6.0之前,如果用戶(hù)在位置欄中輸入 data URLs,data URLs 將繼承當(dāng)前瀏覽器窗口中網(wǎng)頁(yè)的安全上下文

IE 例外

當(dāng)涉及到同源策略時(shí),Internet Explorer 有兩個(gè)主要的不同點(diǎn)

授信范圍(Trust Zones):兩個(gè)相互之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。
端口:IE 未將端口號(hào)加入到同源策略的組成部分之中,因此 http://company.com:81/index.htmlhttp://company.com/index.html 屬于同源并且不受任何限制。
這些例外是非標(biāo)準(zhǔn)的,其它瀏覽器也未做出支持,但會(huì)助于開(kāi)發(fā)基于window RT IE的應(yīng)用程序。

源的更改

這條語(yǔ)句執(zhí)行之后,頁(yè)面將會(huì)成功地通過(guò)對(duì) http://company.com/dir/page.html 的同源檢測(cè)(假設(shè)http://company.com/dir/page.html 將其 document.domain 設(shè)置為“company.com”,以表明它希望允許這樣做 - 更多有關(guān)信息,請(qǐng)參閱 document.domain)。然而,company.com 不能設(shè)置 document.domainothercompany.com,因?yàn)樗皇?company.com 的超級(jí)域。

瀏覽器單獨(dú)保存端口號(hào)。任何的賦值操作,包括 document.domain = document.domain 都會(huì)導(dǎo)致端口號(hào)被重寫(xiě)為 null 。因此 company.com:8080 不能僅通過(guò)設(shè)置 document.domain = "company.com" 來(lái)與company.com 通信。必須在他們雙方中都進(jìn)行賦值,以確保端口號(hào)都為 null 。
注意:使用 document.domain 來(lái)允許子域安全訪問(wèn)其父域時(shí),您需要在父域和子域中設(shè)置 document.domain 為相同的值。這是必要的,即使這樣做只是將父域設(shè)置回其原始值。不這樣做可能會(huì)導(dǎo)致權(quán)限錯(cuò)誤。

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容