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