同源策略,它是由Netscape提出的一個(gè)著名的安全策略责鳍。
現(xiàn)在所有支持JavaScript 的瀏覽器都會(huì)使用這個(gè)策略。
同源的定義
同源是指域名兽间,協(xié)議历葛,端口三個(gè)都相同。
下面的網(wǎng)站同源嗎?
-
http://www.reibang.com 和http://jianshu.com
不同源恤溶,因?yàn)橛蛎煌?/li> -
http://www.bilibili.tv和http://www.bilibili.com
不同源乓诽,因?yàn)橛蛎煌?/li> -
http://localhost:3000 和 http://localhost:3001
不同源,因?yàn)槎丝诓煌?/li> -
http://qq.com 和https://qq.com
不同源,因?yàn)閰f(xié)議不同 -
https://www.pixiv.net 和 https://www.pixiv.net/manage/illusts/
同源咒程,因?yàn)橛蛎欤瑓f(xié)議,端口都相同
不同源會(huì)怎么樣帐姻?
對(duì)于js腳本有限制稠集。
主要表現(xiàn)在3點(diǎn)
(1) 無(wú)法用js讀取非同源的Cookie、LocalStorage 和 IndexDB 無(wú)法讀取饥瓷。
(2) 無(wú)法用js獲取非同源的DOM 剥纷。
(3) 無(wú)法用js發(fā)送非同源的AJAX請(qǐng)求 。更準(zhǔn)確的說(shuō)呢铆,js可以向非同源的服務(wù)器發(fā)請(qǐng)求晦鞋,但是服務(wù)器返回的數(shù)據(jù)會(huì)被瀏覽器攔截。
是誰(shuí)來(lái)執(zhí)行同源策略的棺克?
同源策略是由瀏覽器來(lái)執(zhí)行悠垛。所有的限制都是瀏覽器的作用。這是瀏覽器為了保護(hù)用戶的數(shù)據(jù)安全而采取的策略娜谊。
同源策略如何保護(hù)用戶數(shù)據(jù)安全鼎文?沒(méi)有同源策略會(huì)怎么樣?
同源策略對(duì)于js的限制有3點(diǎn)因俐,我們一點(diǎn)一點(diǎn)來(lái)說(shuō)拇惋。
(1) 無(wú)法用js讀取非同源的Cookie、LocalStorage 和 IndexDB 無(wú)法讀取抹剩。
這條很好理解撑帖。
為了防止惡意網(wǎng)站通過(guò)js獲取用戶其他網(wǎng)站的cookie。
(2) 無(wú)法用js獲取非同源的DOM 澳眷。
如果沒(méi)有這一條胡嘿,惡意網(wǎng)站可以通過(guò)iframe打開(kāi)銀行頁(yè)面,可以獲取dom就相當(dāng)于可以獲取整個(gè)銀行頁(yè)面的信息钳踊。
(3) 無(wú)法用js發(fā)送非同源的AJAX請(qǐng)求 衷敌。
這一條我一開(kāi)始也沒(méi)搞懂為什么。如果沒(méi)有這一條會(huì)有什么危害拓瞪?
看了這篇文章后我終于懂了https://blog.csdn.net/hcrw01/article/details/84289109
我把這部分復(fù)制過(guò)來(lái)放在這里缴罗。
假設(shè)有一個(gè)黑客叫做小黑,他從網(wǎng)上抓取了一堆美女圖做了一個(gè)網(wǎng)站祭埂,每日訪問(wèn)量爆表面氓。
為了維護(hù)網(wǎng)站運(yùn)行,小黑掛了一張收款碼,覺(jué)得網(wǎng)站不錯(cuò)的可以適當(dāng)資助一點(diǎn)舌界,可是無(wú)奈伸手黨太多掘譬,小黑的網(wǎng)站入不敷出。
于是他非常生氣的在網(wǎng)頁(yè)中寫(xiě)了一段js代碼呻拌,使用ajax向淘寶發(fā)起登陸請(qǐng)求葱轩,因?yàn)楹芏鄶?shù)人都訪問(wèn)過(guò)淘寶,所以電腦中存有淘寶的cookie藐握,不需要輸入賬號(hào)密碼直接就自動(dòng)登錄了靴拱,然后小黑在ajax回調(diào)函數(shù)中解析了淘寶返回的數(shù)據(jù),得到了很多人的隱私信息趾娃,轉(zhuǎn)手一賣缭嫡,小黑的網(wǎng)站終于盈利了。
如果跨域也可以發(fā)送AJAX請(qǐng)求的話抬闷,小黑就真的獲取到了用戶的隱私并成功獲利了8局!笤成!
如何跨域請(qǐng)求
這篇主要講為什么要有同源策略评架。
至于怎么跨域訪問(wèn),常用的方法有CORS,JSONP和iframe炕泳。
搜索跨域請(qǐng)求有很多文章纵诞。