摘要:使用的方法假設(shè)要在和頁(yè)面之間傳遞數(shù)據(jù)頁(yè)面頁(yè)面參考鏈接下面談一下跨域訪問的一些安全性問題,主要是和攻擊問題。在跨域訪問中,注入主要是參數(shù)注入,如防止措施是對(duì)參數(shù)進(jìn)行校驗(yàn)過濾。
所謂跨域,或者異源,是指主機(jī)名(域名)、協(xié)議、端口號(hào)只要有其一不同,就為不同的域(或源)。瀏覽器中有一個(gè)基本的策略,叫同源策略,即限制“源”自A的腳本只能操作“同源”頁(yè)面的DOM。
先聊一下w3c的CORS規(guī)范:
CORS旨在定義一種規(guī)范讓瀏覽器在接收到從提供者獲取資源時(shí)能夠決定是否應(yīng)該將此資源分發(fā)給消費(fèi)者作進(jìn)一步處理。
具體如下:
(1)消費(fèi)者發(fā)送一個(gè)Origin報(bào)頭到提供者端:Origin: http://www.a.com;
(2)提供者發(fā)送一個(gè)Access-Control-Allow-Origin響應(yīng)報(bào)頭給消費(fèi)者,如果值為*或Origin對(duì)應(yīng)的站點(diǎn),則表示同意共享資源給消費(fèi)者,如果值為null或者不存在Access-Control-Allow-Origin報(bào)頭,則表示不同意共享資源給消費(fèi)者;
(3)瀏覽器根據(jù)提供者的響應(yīng)報(bào)文判斷是否允許消費(fèi)者跨域訪問到提供者源。
除了CORS,解決跨域還有以下幾種方法:
1、通過Jsonp跨域對(duì)于一段JavaScript腳本來說,其“源”與它存儲(chǔ)的地址無關(guān),而取決于腳本被加載的頁(yè)面,例如我們?cè)陧?yè)面中使用
這里腳本與當(dāng)前頁(yè)面是同源的。除了
也可以使用jquery封裝的方法,如$.ajax:
當(dāng)然還需要服務(wù)端配合處理:
String handleData = request.getParameter("callback");//客戶端的回調(diào)函數(shù) out.println(handleData+"("+resultJSON+")");//返回jsonp格式數(shù)據(jù)
但這種方式只能用于get請(qǐng)求 (╯-╰)/。
2、修改document.domain來跨子域www.a.com/1.html和a.com/2.html是不同域的,要使他們可以跨域訪問,可通過修改document.domain來實(shí)現(xiàn),即在兩個(gè)頁(yè)面中都設(shè)置:
document.domain="a.com";
需要注意的是document.domain只能往父級(jí)修改,如a.com改為www.a.com是不被允許的,這也是此方法的局限性,只使用于跨子域訪問。
window.name是同一瀏覽器窗口下載入的所有頁(yè)面共享的數(shù)據(jù)字段,所有窗口都可以讀寫此字段的內(nèi)容。所以假設(shè)a.com要訪問b.com的數(shù)據(jù),只需要在b.com中將數(shù)據(jù)放在window.name中,然后a.com從中取出即可。此方法適用于像iframe這樣的嵌套頁(yè)面架構(gòu)。
4、使用HTML5的window.postMessage方法:假設(shè)要在a.com和b.com頁(yè)面之間傳遞數(shù)據(jù):
//a.com頁(yè)面 window.postMesssage(JSON.stringify({xxx:"test"},"b.com"); //b.com頁(yè)面 window.onMessage=function(e){ var data = JSON.parse(e.data); console.log(data); //{xxx:"test"} }
參考鏈接:http://javascript.ruanyifeng.com/bom/windowpostmessage.html
下面談一下跨域訪問的一些安全性問題,主要是CSRF和XSS攻擊問題。
一、CSRF/XSRF攻擊網(wǎng)上找到一個(gè)大神發(fā)的圖,貼在這里膜拜一下:
其實(shí)就是危險(xiǎn)網(wǎng)站B在自己網(wǎng)站上貼了網(wǎng)站A的某個(gè)接口鏈接(a標(biāo)簽或form提交是支持跨域的),引導(dǎo)用戶點(diǎn)擊(騙取用戶cookie)去訪問網(wǎng)站A,禍因在于用戶登錄了A在不注銷的情況下登錄了B。解決方法有很多,如驗(yàn)證碼,表單附加隨機(jī)數(shù)等,原理基本都是校驗(yàn)登錄方的請(qǐng)求令牌。
如果使用跨域訪問可以更簡(jiǎn)單的進(jìn)行CSRF攻擊(當(dāng)然也有相應(yīng)的防范措施),當(dāng)某網(wǎng)站通過JSONP方式來跨域傳遞用戶認(rèn)證后的敏感信息時(shí),攻擊者可以構(gòu)造惡意的JSONP調(diào)用頁(yè)面,誘導(dǎo)被攻擊者訪問來達(dá)到截取用戶敏感信息的目的。(這里有一個(gè)微博股吧CSRF攻擊的例子)
目前比較好的防止CSRF攻擊的方法是referer過濾校驗(yàn)+token驗(yàn)證,即服務(wù)端檢測(cè)JSON文件調(diào)用來源和檢查token數(shù)據(jù)是否匹配。
此攻擊方法類似sql注入,即提交含有惡意腳本的數(shù)據(jù)到服務(wù)器,從而達(dá)到破壞頁(yè)面甚至盜取cookie偽裝登錄等目的。例如,在a.com/index.ftl中有如下代碼:歡迎你,${username},這時(shí)惡意網(wǎng)站b.com傳遞參數(shù):
username=
這樣就輕而易舉地盜取了用戶的cookie值了。
在jsonp跨域訪問中,xss注入主要是callback參數(shù)注入,如:
防止措施是對(duì)參數(shù)進(jìn)行校驗(yàn)過濾。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86006.html
摘要:回調(diào)函數(shù)數(shù)據(jù)就是了,回調(diào)函數(shù)用來響應(yīng)應(yīng)該在頁(yè)面中調(diào)用的函數(shù),數(shù)據(jù)則用來傳入要執(zhí)行的回調(diào)函數(shù)。比如會(huì)得到小明這樣,里面的這個(gè)函數(shù)就能執(zhí)行并且得到數(shù)據(jù)了。 由于安全的原因,瀏覽器做了很多方面的工作,由此也就引入了一系列的跨域問題,需要注意的是: 跨域并非瀏覽器限制了發(fā)起跨站請(qǐng)求,而是跨站請(qǐng)求可以正常發(fā)起,但是返回結(jié)果被瀏覽器攔截了。最好的例子是 crsf 跨站攻擊原理,請(qǐng)求是發(fā)送到了后端服...
摘要:一什么是跨域跨域簡(jiǎn)單的理解就是同源策略的限制。同源策略限制的內(nèi)容請(qǐng)求不能正常進(jìn)行。同源策略默認(rèn)地址是網(wǎng)頁(yè)的本身。 一、什么是跨域? 跨域簡(jiǎn)單的理解就是JavaScript同源策略的限制。是出于安全的考慮,a.com域名下的js不能操作b.com或者c.com域名下的對(duì)象。 當(dāng)協(xié)議、子域名、主域名、端口號(hào)中任意一個(gè)不相同時(shí),都算作不同域。不同域之間相互請(qǐng)求資源,就算叫跨域。 一個(gè)正常...
摘要:如果你不太明白模塊化的作用,建議看看玉伯寫的一篇文章。我們可以使用自己的方式去管理代碼,不過有人已經(jīng)研究處理一套標(biāo)準(zhǔn),而且是全球統(tǒng)一,那就拿著用吧關(guān)于規(guī)范,我這里就不多說了,可以去看看草案,玉伯也翻譯了一份。 試發(fā)一彈,本文同步自:http://barretlee.com 略蛋疼的是不支持: [title][url reference] 相信很多人都用過 seajs、 require...
摘要:淺談前端中的錯(cuò)誤捕獲某一天用戶反饋打開的頁(yè)面白屏幕,怎么定位到產(chǎn)生錯(cuò)誤的原因呢日常某次發(fā)布怎么確定發(fā)布會(huì)沒有引入呢此時(shí)捕獲到代碼運(yùn)行的并上報(bào)是多么的重要。 淺談前端中的錯(cuò)誤捕獲 某一天用戶反饋打開的頁(yè)面白屏幕,怎么定位到產(chǎn)生錯(cuò)誤的原因呢?日常某次發(fā)布怎么確定發(fā)布會(huì)沒有引入bug呢?此時(shí)捕獲到代碼運(yùn)行的bug并上報(bào)是多么的重要。 既然捕獲錯(cuò)誤并上報(bào)是日常開發(fā)中不可缺少的一環(huán),那怎么捕獲到...
閱讀 1446·2021-11-24 09:39
閱讀 3626·2021-09-29 09:47
閱讀 1571·2021-09-29 09:34
閱讀 3067·2021-09-10 10:51
閱讀 2536·2019-08-30 15:54
閱讀 3216·2019-08-30 15:54
閱讀 869·2019-08-30 11:07
閱讀 1004·2019-08-29 18:36