造成跨域的兩種策略
瀏覽器的同源策略會導(dǎo)致跨域咖杂,這里同源策略又分為以下兩種
DOM同源策略:禁止對不同源頁面DOM進(jìn)行操作瘦麸。這里主要場景是iframe跨域的情況具帮,不同域名的iframe是限制互相訪問的苟呐。
XmlHttpRequest同源策略:禁止使用XHR對象向不同源的服務(wù)器地址發(fā)起HTTP請求达罗。
只要協(xié)議坝撑、域名、端口有任何一個不同粮揉,都被當(dāng)作是不同的域巡李,之間的請求就是跨域操作。
為什么要有跨域限制扶认?
了解完跨域之后侨拦,想必大家都會有這么一個思考,為什么要有跨域的限制蝠引,瀏覽器這么做是出于何種原因呢阳谍。其實仔細(xì)想一想就會明白蛀柴,跨域限制主要是為了安全考慮螃概。
AJAX同源策略主要用來防止CSRF攻擊。如果沒有AJAX同源策略鸽疾,相當(dāng)危險吊洼,我們發(fā)起的每一次HTTP請求都會帶上請求地址對應(yīng)的cookie,那么可以做如下攻擊:
——用戶登錄了自己的銀行頁面?http://mybank.com制肮,http://mybank.com向用戶的cookie中添加用戶標(biāo)識冒窍。
——用戶瀏覽了惡意頁面?http://evil.com递沪。執(zhí)行了頁面中的惡意AJAX請求代碼。http://evil.com向http://mybank.com發(fā)起AJAX HTTP請求综液,請求會默認(rèn)把http://mybank.com對應(yīng)cookie也同時發(fā)送過去款慨。
——銀行頁面從發(fā)送的cookie中提取用戶標(biāo)識,驗證用戶無誤谬莹,response中返回請求數(shù)據(jù)檩奠。此時數(shù)據(jù)就泄露了。
而且由于Ajax在后臺執(zhí)行附帽,用戶無法感知這一過程埠戳。
DOM同源策略也一樣,如果iframe之間可以跨域訪問蕉扮,可以這樣攻擊:
——做一個假網(wǎng)站整胃,里面用iframe嵌套一個銀行網(wǎng)站?http://mybank.com。
——把iframe寬高啥的調(diào)整到頁面全部喳钟,這樣用戶進(jìn)來除了域名屁使,別的部分和銀行的網(wǎng)站沒有任何差別。
——這時如果用戶輸入賬號密碼荚藻,我們的主網(wǎng)站可以跨域訪問到http://mybank.com的dom節(jié)點屋灌,就可以拿到用戶的輸入了,那么就完成了一次攻擊应狱。
所以說有了跨域跨域限制之后共郭,我們才能更安全的上網(wǎng)了。
跨域的解決方式---待更新