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