什么是CORS?
![](/upload/ad_content/xuanchuantu-16.jpg)
創(chuàng)新互聯(lián)是一家專注于
成都做網(wǎng)站、成都網(wǎng)站制作與策劃設(shè)計(jì),臨潁網(wǎng)站建設(shè)哪家好?
創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:臨潁等地區(qū)。臨潁做網(wǎng)站價(jià)格咨詢:18980820575
默認(rèn)情況下,為預(yù)防某些而已行為,瀏覽器的XHR對(duì)象只能訪問來源于同一個(gè)域中的資源。但是我們?cè)谌粘?shí)際開發(fā)中,常常會(huì)遇到跨域請(qǐng)求的需求,因此就出現(xiàn)了一種跨域請(qǐng)求的方案:CORS(Cross-Origin Resource Sharing)跨域資源共享。
CORS背后的原理是:使用自定的HTTP頭部與服務(wù)器進(jìn)行溝通,從而由服務(wù)器決定響應(yīng)是否成功。
了解下同源策略
- 源(origin)*:就是協(xié)議、域名和端口號(hào);
- 同源: 就是源相同,即協(xié)議、域名和端口完全相同;
- 同源策略:同源策略是瀏覽器的一個(gè)安全功能,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對(duì)方資源;
- 同源策略的分類:
- DOM 同源策略:即針對(duì)于DOM,禁止對(duì)不同源頁面的DOM進(jìn)行操作;如不同域名的 iframe 是限制互相訪問。
- XMLHttpRequest 同源策略:禁止使用 XHR 對(duì)象向不同源的服務(wù)器地址發(fā)起 HTTP 請(qǐng)求。
- 不受同源策略限制:
- 頁面中的鏈接,重定向以及表單提交(因?yàn)楸韱翁峤?,?shù)據(jù)提交到action域后,本身頁面就和其沒有關(guān)系了,不會(huì)管請(qǐng)求結(jié)果,后面操作都交給了action里面的域)是不會(huì)受到同源策略限制的。
- 資源的引入不受限制,但是js不能讀寫加載的內(nèi)容:如嵌入到頁面中的<script src="..."></script>,<img>,<link>,<iframe>等
為什么要跨域限制
- 如果沒有 DOM 同源策略:那么就沒有啥xss的研究了,因?yàn)槟愕木W(wǎng)站將不是你的網(wǎng)站,而是大家的,誰都可以寫個(gè)代碼操作你的網(wǎng)站界面
- 如果沒有XMLHttpRequest 同源策略,那么就可以很輕易的進(jìn)行CSRF(跨站請(qǐng)求偽造)攻擊:
- 用戶登錄了自己的網(wǎng)站頁面 a.com,cookie中添加了用戶標(biāo)識(shí)。
- 用戶瀏覽了惡意頁面 b.com,執(zhí)行了頁面中的惡意 AJAX 請(qǐng)求代碼。
- b.com 向 a.com發(fā)起 AJAX HTTP 請(qǐng)求,請(qǐng)求會(huì)默認(rèn)把 a.com對(duì)應(yīng)cookie也同時(shí)發(fā)送過去。
- a.com從發(fā)送的 cookie 中提取用戶標(biāo)識(shí),驗(yàn)證用戶無誤,response 中返回請(qǐng)求數(shù)據(jù);數(shù)據(jù)就泄露了。而且由于Ajax在后臺(tái)執(zhí)行,這一過程用戶是無法感知的。
- (附)有了XMLHttpRequest 同源策略就可以限制CSRF攻擊?別忘了還有不受同源策略的:表單提交和資源引入,(安全問題下期在研究)
跨域決解方案
- JSONP 跨域:借鑒于 script 標(biāo)簽不受瀏覽器同源策略的影響,允許跨域引用資源;因此可以通過動(dòng)態(tài)創(chuàng)建 script 標(biāo)簽,然后利用 src 屬性進(jìn)行跨域;
- 缺點(diǎn):
- 所有網(wǎng)站都可以拿到數(shù)據(jù),存在安全性問題,需要網(wǎng)站雙方商議基礎(chǔ)token的身份驗(yàn)證。
- 只能是GET,不能POST。
- 可能被注入惡意代碼,篡改頁面內(nèi)容,可以采用字符串過濾來規(guī)避此問題。
- 服務(wù)器代理:瀏覽器有跨域限制,但是服務(wù)器不存在跨域問題,所以可以由服務(wù)器請(qǐng)求所要域的資源再返回給客戶端。
- document.domain、window.name 、location.hash:借助于iframe決解DOM同源策略
- postMessage:決解DOM同源策略,新方案
- CORS(跨域資源共享):這里講的重點(diǎn)
CORS(跨域資源共享)
- HTML5 提供的標(biāo)準(zhǔn)跨域解決方案,是一個(gè)由瀏覽器共同遵循的一套控制策略,通過HTTP的Header來進(jìn)行交互;主要通過后端來設(shè)置CORS配置項(xiàng)。
CORS簡(jiǎn)單使用
之前說得CORS跨域,嗯嗯,后端設(shè)置Access-Control-Allow-Origin:*|[或具體的域名]就好了;
第一次嘗試:
app.use(async(ctx,next) => {
ctx.set({
"Access-Control-Allow-Origin": "http://localhost:8088"
})
分享標(biāo)題:你可能不知道的CORS跨域資源共享-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://chinadenli.net/article16/jjsdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站收錄、定制網(wǎng)站、虛擬主機(jī)、網(wǎng)站改版
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)