同源策略限制了從不同源加載的文檔或腳本之間的交互腻格。是用于隔離潛在惡意文件的重要安全機(jī)制。
同源定義
影響源的因素: 域名(Host)丧肴、端口(Port)吆你、協(xié)議(Protocol)
相對(duì)http://example.flexiblecat.com/dir/index.html
同源檢測(cè)的示例:
(默認(rèn)端口為80)
URL | 結(jié)果 | 原因 |
---|---|---|
http://example.flexiblecat.com/dir/fine.html |
成功 | |
http://other.flexiblecat.com/dir/index.html |
失敗 | 不同域名 |
http://example.flexiblecat.com/dir/nice.html:81 |
失敗 | 端口不同 |
https://example.flexiblecat.com/dir/cross.html |
失敗 | 協(xié)議不同 |
誰受約束?
DOM尊沸、Cookie威沫、第三方插件以及XMLHttpRequest都受到同源策略的約束。
Cookie
只有同源的網(wǎng)頁(yè)才能共享洼专,但是若兩個(gè)頁(yè)面一級(jí)域名相同棒掠,只是二級(jí)域名不同,那么瀏覽器可以通過設(shè)置document.domain
來共享Cookie屁商。
這是網(wǎng)頁(yè)A:http://a.flexiblecat.com/index.tml
這是網(wǎng)頁(yè)B:http://b.flexiblecat.com/index.tml
只要把他們的document.domain設(shè)置成相同的烟很,例如:document.domain='flexiblecat.com'
,這兩個(gè)網(wǎng)頁(yè)就可一共享Cookie啦~
不過這種方法只適用于Cookie和iframe窗口
XMLHttpRequest
它受到同源策略的約束,不能跨域訪問資源雾袱,但是W3C委員會(huì)制定了XMLHttpRequest跨域訪問標(biāo)準(zhǔn)恤筛。
通過目標(biāo)返回的HTTP頭來授權(quán),是否允許跨域訪問芹橡。實(shí)現(xiàn)這一點(diǎn)的安全基礎(chǔ)是JavaScript無法控制HTTP頭毒坛。
第三方插件
常見的有Flash、Google Gears等林说。第三方插件的同源策略是它們自己的粘驰,不是瀏覽器原生同源策略,若有漏洞述么,可能會(huì)被利用,產(chǎn)生XSS等攻擊
同源策略并不是牢不可摧的愕掏,也可能被繞過度秘,典型的有IE 8的CSS跨域漏洞。
這一個(gè)漏洞是利用@import加載企圖被讀取內(nèi)容的頁(yè)面A為CSS文件饵撑,渲染進(jìn)入當(dāng)前頁(yè)面的DOM剑梳,然后通過document.body.currentStyle.frontFamily來訪問頁(yè)面A的內(nèi)容。具體內(nèi)容滑潘,感興趣的話可以自行百度一下垢乙,也很好找。
要看一個(gè)網(wǎng)站的策略文件语卤,一般都是URL后面加上
/crossdomain.xml
誰不受限制追逮?
一個(gè)頁(yè)面編寫過程中會(huì)用到很多很多的標(biāo)簽,勤勤懇懇認(rèn)真堅(jiān)守崗位的小螺絲釘們粹舵。但是可別小看他們钮孵,有的小螺絲釘可是不受同源策略的限制的哦~
例如:<script>
、<img>
眼滤、<link>
巴席、<iframe>
等帶src屬性的標(biāo)簽;
為什么它們可以被允許跨域嵌入诅需?
- 首先漾唉,網(wǎng)站的JS腳本、圖片堰塌、音頻等資源不一定是放在存儲(chǔ)網(wǎng)站頁(yè)面的服務(wù)器上的赵刑,可能會(huì)通過別的方式將資源傳送到瀏覽器中;
- 其次蔫仙,網(wǎng)站的編寫人員正常情況下并不會(huì)故意加載惡意腳本到網(wǎng)站中料睛,所以,我們默認(rèn)正常網(wǎng)頁(yè)的腳本是安全的;
- 最后恤煞,對(duì)于當(dāng)前頁(yè)面來說屎勘,頁(yè)面內(nèi)加載的JS文件本身放在哪里并不重要,只要它被誰加載了居扒,就和誰同源概漱。例如:
a.js這個(gè)JS文件,原本在x.com頁(yè)面中喜喂,后來它被y.com這個(gè)頁(yè)面加載了瓤摧,這個(gè)時(shí)候,a.js就和y.com這個(gè)頁(yè)面同源玉吁,而不是x.com照弥。
跨域漏洞圍觀:
UC瀏覽器跨本地域XSS可盜取任意域Cookie https://www.secpulse.com/archives/16840.html
JSONP和CORS跨站跨域讀取資源的漏洞利用 https://www.anquanke.com/post/id/152339
寫在最后,這一塊內(nèi)容必須得了解一下进副,這是瀏覽器安全很重要的內(nèi)容这揣,沒有它,你還敢用瀏覽器嘛影斑!你的Cookie能被人隨意取用给赞,你的信息沒有保障,怕是要上天哦矫户。
關(guān)于W3C委員會(huì)制定的XMLHttpRequest跨域訪問標(biāo)準(zhǔn)片迅,感興趣的話自己去查一下了解一下就行。