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