溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

瀏覽器的同源策略

發(fā)布時(shí)間:2020-08-05 07:00:45 來(lái)源:網(wǎng)絡(luò) 閱讀:233 作者:博文視點(diǎn) 欄目:web開(kāi)發(fā)

瀏覽器的同源策略

古代的楚河漢界明確規(guī)定了楚漢兩軍的活動(dòng)界限,理應(yīng)遵守,否則必天下大亂,而事實(shí)上天下曾大亂后又統(tǒng)一。這里我們不用管這些“分久必合,合久必分”的問(wèn)題,關(guān)鍵是看到這里規(guī)定的“界限”。Web世界之所以能如此美好地呈現(xiàn)在我們面前,多虧了瀏覽器的功勞,不過(guò)瀏覽器不是一個(gè)花瓶——只負(fù)責(zé)呈現(xiàn),它還制定了一些安全策略,這些安全策略有效地保障了用戶(hù)計(jì)算機(jī)的本地安全與Web安全。

 注:

計(jì)算機(jī)的本地與Web是不同的層面,Web世界(通常稱(chēng)為Internet域)運(yùn)行在瀏覽器上,而被限制了直接進(jìn)行本地?cái)?shù)據(jù)(通常稱(chēng)為本地域)的讀寫(xiě)。

同源策略是眾多安全策略的一個(gè),是Web層面上的策略,非常重要,如果少了同源策略,就等于楚漢兩軍沒(méi)了楚河漢界,這樣天下就大亂了。

同源策略規(guī)定:不同域的客戶(hù)端腳本在沒(méi)明確授權(quán)的情況下,不能讀寫(xiě)對(duì)方的資源。

下面分析同源策略下的這個(gè)規(guī)定,其中有幾個(gè)關(guān)鍵詞:不同域、客戶(hù)端腳本、授權(quán)、讀寫(xiě)、資源。

1.不同域或同域

同域要求兩個(gè)站點(diǎn)同協(xié)議、同域名、同端口,比如:表 1-1 展示了表中所列站點(diǎn)與http://www.foo.com是否同域的情況。

表1-1  是否同域情況

站    點(diǎn)

是否同域

原    因

https://www.foo.com

不同域

協(xié)議不同,https與http是不同的協(xié)議

http://xeyeteam.foo.com

不同域

域名不同,xeyeteam子域與www子域不同

http://foo.com

不同域

域名不同,頂級(jí)域與www子域不是一個(gè)概念

http://www.foo.com:8080

不同域

端口不同,8080與默認(rèn)的80端口不同

http://www.foo.com/a/

同域

滿(mǎn)足同協(xié)議、同域名、同端口,只是這里多了一個(gè)目錄而已

從表1-1中的對(duì)比情況可以看出,我們通常所說(shuō)的兩個(gè)站點(diǎn)同域就是指它們同源。

2.客戶(hù)端腳本

客戶(hù)端腳本主要指JavaScript(各個(gè)瀏覽器原生態(tài)支持的腳本語(yǔ)言)、ActionScript(Flash的腳本語(yǔ)言),以及JavaScript與ActionScript都遵循的ECMAScript腳本標(biāo)準(zhǔn)。Flash提供通信接口,使得這兩個(gè)腳本語(yǔ)言可以很方便地互相通信??蛻?hù)端的***幾乎都是基于這兩個(gè)腳本語(yǔ)言進(jìn)行的,當(dāng)然JavaScript是最廣泛的。

被打入“冷宮”的客戶(hù)端腳本有VBScript,由于該腳本語(yǔ)言相對(duì)較孤立,又有當(dāng)紅的JavaScript存在,所以實(shí)在是沒(méi)有繼續(xù)存在的必要。

3.授權(quán)

一般情況下,看到這個(gè)詞,我們往往會(huì)想到服務(wù)端對(duì)客戶(hù)端訪(fǎng)問(wèn)的授權(quán)??蛻?hù)端也存在授權(quán)現(xiàn)象,比如:HTML5新標(biāo)準(zhǔn)中提到關(guān)于AJAX跨域訪(fǎng)問(wèn)的情況,默認(rèn)情況下是不允許跨域訪(fǎng)問(wèn)的,只有目標(biāo)站點(diǎn)(假如是http://www.foo.com)明確返回HTTP響應(yīng)頭:

Access-Control-Allow-Origin: http://www.evil.com

那么www.evil.com站點(diǎn)上的客戶(hù)端腳本就有權(quán)通過(guò)AJAX技術(shù)對(duì)www.foo.com上的數(shù)據(jù)進(jìn)行讀寫(xiě)操作。這方面的***細(xì)節(jié)很有趣,相關(guān)內(nèi)容在后面會(huì)詳細(xì)介紹。

 注:

AJAX是Asynchronous JavaScript And XML的縮寫(xiě),讓數(shù)據(jù)在后臺(tái)進(jìn)行異步傳輸,常見(jiàn)的使用場(chǎng)景有:對(duì)網(wǎng)頁(yè)的局部數(shù)據(jù)進(jìn)行更新時(shí),不需要刷新整個(gè)網(wǎng)頁(yè),以節(jié)省帶寬資源。AJAX也是***進(jìn)行Web客戶(hù)端***常用的技術(shù),因?yàn)檫@樣***就可以悄無(wú)聲息地在瀏覽器后臺(tái)進(jìn)行,做到“殺人無(wú)形”。

4.讀寫(xiě)權(quán)限

Web上的資源有很多,有的只有讀權(quán)限,有的同時(shí)擁有讀和寫(xiě)的權(quán)限。比如:HTTP請(qǐng)求頭里的Referer(表示請(qǐng)求來(lái)源)只可讀,而document.cookie則具備讀寫(xiě)權(quán)限。這樣的區(qū)分也是為了安全上的考慮。

5.資源

資源是一個(gè)很廣泛的概念,只要是數(shù)據(jù),都可以認(rèn)為是資源。同源策略里的資源是指Web客戶(hù)端的資源。一般來(lái)說(shuō),資源包括:HTTP消息頭、整個(gè)DOM樹(shù)、瀏覽器存儲(chǔ)(如:Cookies、Flash Cookies、localStorage等)??蛻?hù)端安全威脅都是圍繞這些資源進(jìn)行的。

 注:

DOM全稱(chēng)為Document Object Model,即文檔對(duì)象模型,就是瀏覽器將HTML/XML這樣的文檔抽象成一個(gè)樹(shù)形結(jié)構(gòu),樹(shù)上的每個(gè)節(jié)點(diǎn)都代表HTML/XML中的標(biāo)簽、標(biāo)簽屬性或標(biāo)簽內(nèi)容等。這樣抽象出來(lái)就大大方便了JavaScript進(jìn)行讀/寫(xiě)操作。Web客戶(hù)端的***幾乎都離不開(kāi)DOM操作。

到此,已經(jīng)將同源策略的規(guī)定分析清楚,如果Web世界沒(méi)有同源策略,當(dāng)你登錄Gmail郵箱并打開(kāi)另一個(gè)站點(diǎn)時(shí),這個(gè)站點(diǎn)上的JavaScript就可以跨域讀取你的Gmail郵箱數(shù)據(jù),這樣整個(gè)Web世界就無(wú)隱私可言了。這就是同源策略的重要性,它限制了這些行為。當(dāng)然,在同一個(gè)域內(nèi),客戶(hù)端腳本可以任意讀寫(xiě)同源內(nèi)的資源,前提是這個(gè)資源本身是可讀可寫(xiě)的。

 

本文節(jié)選自《web前端***技術(shù)揭秘》

瀏覽器的同源策略

鐘晨鳴,徐少培編著

電子工業(yè)出版社出版

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI