摘要:四跨域攻擊跨域攻擊可以理解為誘導受害者訪問非法網(wǎng)站,黑客利用受害者的會話信息模擬請求,以達到篡改數(shù)據(jù)的目的。我們在百度上搜索一些關(guān)鍵字之后,訪問其他網(wǎng)站時例如會發(fā)現(xiàn),為何我剛剛搜索的關(guān)鍵字圖片會在網(wǎng)頁上顯示那很有可能放置了百度的腳本代碼。
本人工作中偶爾會和瀏覽器打交道,也遇到過一些坑,在此分享一下網(wǎng)頁跨域訪問的相關(guān)場景和知識,希望對讀者有幫助。
本文來自于我的博客網(wǎng)站:www.51think.net
凡是與主站地址的域名、端口、協(xié)議不一致的其他請求,都可以認為是跨域訪問。例如某網(wǎng)站的主站地址是https://www.abc.com,但網(wǎng)頁又...(地址是https://img.abc.com),這就是一種跨域訪問。
二、瀏覽器的同源策略所謂的同源策略是瀏覽器所遵循的一種安全約定。其限制了來自不同源的document或者腳本對當前的document讀取或設(shè)置某些屬性。具體限制如下:
跨源網(wǎng)絡(luò)訪問:AJAX請求。
跨源 DOM 訪問:DOM。
跨源腳本API訪問: iframe.contentWindow, window.parent, window.open 和 window.opener
如果沒有這些限制,那我們就可以肆無忌憚的破壞其他網(wǎng)站的網(wǎng)頁了。三、如何進行跨域訪問
跨域訪問不是跨域攻擊,業(yè)務(wù)上我們的確有跨域訪問的需要。
#### 1、通過標簽的src或者href屬性。
例如< script >、< img >、< iframe >、< link >,訪問靜態(tài)資源文件雖然是跨域,但不受同源策略限制,因為使用的是標簽訪問。src屬性訪問的地址是一次性的get訪問,且是主站主動設(shè)置,相對安全。
form表單提交到其他域也是被允許的。因為form提交意味著跳轉(zhuǎn)到新的站點,是一個有去無回的頁面跳轉(zhuǎn),不存在對原站點的腳本操作。
3、jsonp訪問。這一般是跨域訪問的常用手段,jsonp可以幫助我們從另一方站點獲取數(shù)據(jù),并作用于本地站點的頁面。這是本地站點開發(fā)人員的主動行為。jsonp跨域使用的是script標簽的跨域功能,通過src屬性訪問第三方系統(tǒng)并獲取返回數(shù)組作用于本地函數(shù)中。假設(shè)在ablog.com的頁面中訪問bblog.com的服務(wù),可以在頁面中寫入如下代碼,callback參數(shù)定義是回調(diào)函數(shù):
< script src="http://bblog.com:8083/remote?callback=jsonhandle">
bblog.com的服務(wù)端代碼如下,需要按照回調(diào)函數(shù)名+(json數(shù)據(jù))的格式返回:
@GetMapping("/remote") @ResponseBody public String remote(HttpServletRequest request, Model model) { String callback=request.getParameter("callback"); String jsonpStr = callback + "(" + "{"age" : 15,"name": "jack",}"+ ")"; return jsonpStr; }4、cors跨資源共享。
CORS 需要瀏覽器和服務(wù)器同時支持。目前,所有瀏覽器都支持該功能,IE 瀏覽器不能低于 IE10。
四、跨域攻擊跨域攻擊可以理解為:誘導受害者訪問非法網(wǎng)站,黑客利用受害者的會話信息模擬請求,以達到篡改數(shù)據(jù)的目的。由此看來,跨域攻擊有幾個先決條件:
1、要有頁面入口,供受害者點擊或者頁面自動加載。 2、攻擊請求可模擬,黑客對目標網(wǎng)站參數(shù)進行了深入的研究,從而進行模擬。第一點的頁面入口非常重要,如何在目標網(wǎng)站(地址:http://ablog.com:8080)植入攻擊者的代碼?假設(shè)目標網(wǎng)站有評論功能,攻擊者可以將自己的代碼輸入到評論區(qū),如果目標網(wǎng)站沒有XSS防御,則會將攻擊者的代碼以html的方式顯示在網(wǎng)頁上,這也就完成了第一點,提供了攻擊入口。例如攻擊者可以在評論區(qū)輸入以下內(nèi)容:
java速成,點我免費領(lǐng)取
或者如下內(nèi)容:
將這段代碼輸入到評論區(qū)并顯示,依然可以誘導受害者點擊,完成post請求。攻擊者也可以將更復雜的邏輯封裝在自己搭建的網(wǎng)站中,假設(shè)黑客網(wǎng)站地址是http://bblog.com:8083,攻擊者將參數(shù)傳遞給自己的服務(wù)器,實現(xiàn)跨域攻擊,在目標網(wǎng)站ablog.com的評論區(qū)中留下如下代碼:
java速成,點我免費領(lǐng)取 在黑客網(wǎng)站bblog.com里模擬post請求到ablog.com:
由于受害者在ablog.com中的會話仍然保持,這個模擬請求會帶上受害者的會話信息,進行刪除操作,而對于服務(wù)器端來說是無感的。在bblog.com里模擬post請求到ablog.com,為何沒有被跨域攔截?上文有提到過,form表單提交是沒有跨域限制的,這為跨域攻擊也提供了便利。
上述攻擊方式還不算隱蔽,畢竟需要受害者點擊觸發(fā)按鈕,還需要頁面跳轉(zhuǎn),太low。我們可以使用一個影藏的iframe完成攻擊,使得攻擊操作神不知鬼不覺。在網(wǎng)站ablog.com評論區(qū)中植入如下代碼: form模擬提交的部分依然放在bblog.com中,使用腳本自動執(zhí)行。部分代碼如下:
在bblog.com中如果使用ajax來模擬請求攻擊ablog.com會被瀏覽器攔截,ajax腳本如下:
function dianwoSub() { $.ajax({ type: "post", url: "http://ablog.com:8080/admin/comments/delete", data: $("#dianwoForm").serialize(), async: false, dataType: "json", success: function (result) { alert(" delete ok"); } }); }
運行時,瀏覽器會報如下錯誤,即ablog和blog非同源,跨域訪問被限制:
用戶的任何輸入必須要經(jīng)過后臺的校驗,如果出現(xiàn)非法字符一定要攔截,將代碼植入入口堵死。
2、系統(tǒng)請求優(yōu)先使用post提交。get提交會降低攻擊門檻。
3、refer來源判斷。網(wǎng)站系統(tǒng)在接受請求時,判斷請求來源是否是可信任的,如果是非法的則需要攔截。
4、增加驗證碼校驗。在做增刪改操作時,強行讓用戶再次與后臺交互,這能很大程度上避免攻擊,但是影響用戶體驗。
5、token校驗。用戶在訪問某一網(wǎng)頁時,后端生成一個隨機加密字符串放到session中,用戶再次請求時攜帶此token,后端對比token是否正確,不正確則攔截請求。
六、網(wǎng)絡(luò)信標網(wǎng)絡(luò)信標又名網(wǎng)絡(luò)臭蟲,通過植入第三方代碼來收集訪問者信息。例如在ablog.com網(wǎng)站中植入如下代碼:
大小僅為一個像素,用戶很難發(fā)現(xiàn)。凡是打開植入此代碼的網(wǎng)頁,都會訪問bblog.com,bblog.com后臺能夠收集到如下信息:
通過以上信息,我們可以給用戶設(shè)置一個唯一標記,并寫入到cookie中,例如bloguser=user_127.0.0.11540367865328。后端同時將此標記以及對應(yīng)信息保存到數(shù)據(jù)庫中,這樣可以跟蹤某一特定用戶的訪問路徑。假設(shè)一個集團公司的業(yè)務(wù)范圍非常廣,其信息化系統(tǒng)包含多個二級域名,比如注冊頁面是login.blog.com,充值頁面是deposit.xyz.com,購物頁面是shopping.abc.com等,這些域名的cookie是無法共享的,這時候可以采取網(wǎng)絡(luò)信標的方式,在所有主頁上均植入上述代碼,通過第三方cookie的方式,將訪問者信息全部串聯(lián)起來。 網(wǎng)絡(luò)信標的另外一種使用場景是廣告推薦。百度的廣告聯(lián)盟就是很好的例子。我們在百度上搜索一些關(guān)鍵字之后,訪問其他網(wǎng)站時(例如CSDN)會發(fā)現(xiàn),為何我剛剛搜索的關(guān)鍵字圖片會在CSDN網(wǎng)頁上顯示?那CSDN很有可能放置了百度的腳本代碼。用戶在百度上進行搜索之后,百度將搜索關(guān)鍵字寫入到用戶的cookie信息中,CSDN內(nèi)置了百度的廣告代碼,這個代碼會訪問百度服務(wù)器,同時會帶上百度之前設(shè)置的cookie,百度后臺根據(jù)關(guān)鍵字來響應(yīng)相關(guān)圖片或者文字鏈接,達到精準投放廣告的效果。 現(xiàn)在我們來模擬一下百度廣告聯(lián)盟的效果。假設(shè)bblog.com就是百度系統(tǒng),我們模擬一個搜索頁面,并搜索關(guān)鍵字“手機”: ![](http://51think.net/upload/2018/11/253mn0n9e6ic4oesipd8gmqcqv.jpg)
bblog.com的后端將手機寫入到cookie,key為sosuoPara:
setCookie(response,"sosuoPara",sosuoPara,60*60); bblog.com的合作網(wǎng)站ablog.com內(nèi)置了bblog.com廣告代碼:廣告頁
這段廣告代碼的后端邏輯是取出cookie信息,得到搜索關(guān)鍵字,后端進行匹配處理,返回給前端廣告。這時候我們看一下ablog.com的主頁廣告,見如下紅框位置:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100902.html
摘要:四跨域攻擊跨域攻擊可以理解為誘導受害者訪問非法網(wǎng)站,黑客利用受害者的會話信息模擬請求,以達到篡改數(shù)據(jù)的目的。我們在百度上搜索一些關(guān)鍵字之后,訪問其他網(wǎng)站時例如會發(fā)現(xiàn),為何我剛剛搜索的關(guān)鍵字圖片會在網(wǎng)頁上顯示那很有可能放置了百度的腳本代碼。 本人工作中偶爾會和瀏覽器打交道,也遇到過一些坑,在此分享一下網(wǎng)頁跨域訪問的相關(guān)場景和知識,希望對讀者有幫助。本文來自于我的博客網(wǎng)站:www.51th...
摘要:對的請求,也是要有一個了解,比如協(xié)議,請求方式,請求過程,結(jié)果狀態(tài)碼等。教程協(xié)議詳解經(jīng)典面試題一個故事講完響應(yīng)狀態(tài)碼上面提到響應(yīng)狀態(tài)碼,在這里也簡單寫下。 勸了別人無數(shù)次,讓別人喝了雞湯,幫別人填坑,自己卻掉了坑 1.前言 在前端學習里面,很多人都是注重學習代碼(html,css,js)?;蛘呤且恍┛蚣?,庫(jquery,vue,react),或者是各種工具(webpack,gulp)...
摘要:對的請求,也是要有一個了解,比如協(xié)議,請求方式,請求過程,結(jié)果狀態(tài)碼等。教程協(xié)議詳解經(jīng)典面試題一個故事講完響應(yīng)狀態(tài)碼上面提到響應(yīng)狀態(tài)碼,在這里也簡單寫下。 勸了別人無數(shù)次,讓別人喝了雞湯,幫別人填坑,自己卻掉了坑 1.前言 在前端學習里面,很多人都是注重學習代碼(html,css,js)?;蛘呤且恍┛蚣埽瑤欤╦query,vue,react),或者是各種工具(webpack,gulp)...
摘要:對的請求,也是要有一個了解,比如協(xié)議,請求方式,請求過程,結(jié)果狀態(tài)碼等。教程協(xié)議詳解經(jīng)典面試題一個故事講完響應(yīng)狀態(tài)碼上面提到響應(yīng)狀態(tài)碼,在這里也簡單寫下。 勸了別人無數(shù)次,讓別人喝了雞湯,幫別人填坑,自己卻掉了坑 1.前言 在前端學習里面,很多人都是注重學習代碼(html,css,js)?;蛘呤且恍┛蚣?,庫(jquery,vue,react),或者是各種工具(webpack,gulp)...
摘要:區(qū)塊鏈擴展性迷局比特幣作為第一個區(qū)塊鏈應(yīng)用與運行到目前為止最被信任的公鏈,其擴展性問題卻持續(xù)被作為焦點貫穿著整個鏈的發(fā)展周期。當然區(qū)塊鏈與也可以保留回執(zhí),用于驗證后續(xù)跨鏈交易的持續(xù)性。 區(qū)塊鏈擴展性迷局 比特幣作為第一個區(qū)塊鏈應(yīng)用與運行到目前為止最被信任的公鏈,其擴展性問題卻持續(xù)被作為焦點貫穿著整個鏈的發(fā)展周期。事實上,在2009年1月4日比特幣出現(xiàn)的那一天到2010年10月1日之間,...
閱讀 1094·2021-10-08 10:04
閱讀 3530·2021-08-05 10:01
閱讀 2287·2019-08-30 11:04
閱讀 1808·2019-08-29 15:29
閱讀 856·2019-08-29 15:12
閱讀 1680·2019-08-26 12:11
閱讀 3127·2019-08-26 11:33
閱讀 1172·2019-08-26 10:23