欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以成都做網(wǎng)站、網(wǎng)站制作、移動(dòng)互聯(lián)產(chǎn)品、成都營(yíng)銷網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。10年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

任意URL跳轉(zhuǎn)漏洞

服務(wù)端未對(duì)傳入的跳轉(zhuǎn)url變量進(jìn)行檢查和控制,導(dǎo)致可惡意構(gòu)造任意一個(gè)惡意地址,誘導(dǎo)用戶跳轉(zhuǎn)到惡意網(wǎng)站。由于是從可信的站點(diǎn)跳轉(zhuǎn)出去的,用戶會(huì)比較信任,所以跳轉(zhuǎn)漏洞一般用于釣魚攻擊,通過轉(zhuǎn)到惡意網(wǎng)站欺騙用戶輸入用戶名和密碼盜取用戶信息,或欺騙用戶進(jìn)行金錢交易。

修復(fù)該漏洞最有效的方法之一就是校驗(yàn)傳入的跳轉(zhuǎn)url參數(shù)值,判斷是否為預(yù)期域名。在java中可使用下列方法:

String url = request.getParameter("returnUrl"); String host = ""; try {     host = new URL(url).getHost(); } catch (MalformedURLException e) {     e.printStackTrace(); } if host.endsWith(".bbb.com"){     //跳轉(zhuǎn) }else{     //不跳轉(zhuǎn),報(bào)錯(cuò) }

上述代碼中主要校驗(yàn)了客戶端傳來(lái)的returnUrl參數(shù)值,使用java.net.URL包中的getHost()方法獲取了將要跳轉(zhuǎn)url的host,判斷host是否為目標(biāo)域,上述代碼中限制了必須跳轉(zhuǎn)到xxx.bbb.com的域名,從而排除了跳轉(zhuǎn)到不可信域名的可能。

但是,getHost()方法真的靠譜嗎??

getHost()方法的坑之一

可以被反斜線繞過,即returnUrl=http://www.aaa.com\www.bbb.com會(huì)被代碼認(rèn)為是將要跳轉(zhuǎn)到bbb.com,而實(shí)際在瀏覽器中反斜線被糾正為正斜線,跳轉(zhuǎn)到www.aaa.com/www.bbb.com,最終還是跳到www.aaa.com的服務(wù)器。

使用下列代碼進(jìn)行測(cè)試:

public class Main {      public static void main(String[] args) {         String url = "https://www.aaa.com\\www.bbb.com?x=123";         String host = "";         try {             host = new URL(url).getHost();         } catch (MalformedURLException e) {             e.printStackTrace();         }         System.out.println("host---"+host);         System.out.println("url---"+url);     } }

url參數(shù)的域名getHost()之后是www.aaa.com還是www.bbb.com呢?打印結(jié)果如下:

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

該結(jié)果會(huì)被endsWith(“.bbb.com”)方法判斷為真,從而成功執(zhí)行跳轉(zhuǎn),但實(shí)際在瀏覽器中跳轉(zhuǎn)到了www.aaa.com網(wǎng)站。

getHost()方法的坑之二

getHost()方法的結(jié)果在不同JDK版本中對(duì)井號(hào)#的處理結(jié)果不同,通常井號(hào)被用作頁(yè)面錨點(diǎn),對(duì)于https://www.aaa.com#www.bbb.com?x=123這個(gè)url,較高版本的JDK中,取出結(jié)果為www.aaa.com,低版本中為www.aaa.com#www.bbb.com,從而低版本又可繞過endsWith(“.bbb.com”)方法,成功跳轉(zhuǎn)。

這里所說的高版本指的是java version 1.8.0_181或者java version  1.7.0_161中的181和161,與JDK7還是8無(wú)關(guān)??赡躩ava在某個(gè)時(shí)間集中修復(fù)了JDK6/7/8中的URL庫(kù)。

測(cè)試過程中發(fā)現(xiàn)1.6.0_45,1.7.0_71,1.8.0_25均可被#繞過,即不同的JDK中低版本均存在問題。

通過對(duì)比rt.jar---java---net--URLStreamHandler.java代碼(低版本為左邊,高版本為右邊)找到問題所在如下圖所示,代碼中的start為url中冒號(hào)位置,limit為url中井號(hào)位置:

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

從代碼中可以發(fā)現(xiàn),低版本中未考慮到一個(gè)完整url中斜線/或者問號(hào)?之前會(huì)出現(xiàn)井號(hào)#的情況,如果url中有斜線/或者問號(hào)?,取host就以斜線或者問號(hào)為終止,即使中間包含井號(hào)也不處理;而高版本中進(jìn)行了井號(hào)位置的判斷,排除了使用井號(hào)繞過的可能。但是線上生成環(huán)境的JDK版本又不是敢隨便亂升級(jí)的,只能從代碼里提前預(yù)防。

下圖為使用不同版本JDK測(cè)試的結(jié)果:

同一段代碼在不同JDK版本中打印出的host值不同,在低版本中包含了井號(hào)及其后邊的部分。

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

綜合上述兩個(gè)坑,若想使用getHost()來(lái)修復(fù)任意URL跳轉(zhuǎn)漏洞,需要考慮到反斜線和井號(hào)繞過,可使用如下代碼:

String url = request.getParameter("returnUrl"); String host = ""; try {     urlurl = url.replaceAll("[\\\\#],"/"); //替換掉反斜線和井號(hào)     host = new URL(url).getHost();   } catch (MalformedURLException e) {     e.printStackTrace(); } if host.endsWith(".bbb.com"){     //跳轉(zhuǎn) }else{     //不跳轉(zhuǎn),報(bào)錯(cuò) }

附送一個(gè)真實(shí)例子

該站可使用井號(hào)配合斜線或者問號(hào)來(lái)繞過域名檢測(cè),即將target設(shè)置為URL編碼后的https://www.baidu.com#www.bbb.com?x=123,該站即可302跳轉(zhuǎn)到百度。

任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

本文名稱:任意URL跳轉(zhuǎn)漏洞怎樣修復(fù)與JDK中g(shù)etHost()方法之間的坑
轉(zhuǎn)載來(lái)于:http://chinadenli.net/article32/gigssc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)網(wǎng)站策劃、外貿(mào)網(wǎng)站建設(shè)虛擬主機(jī)、用戶體驗(yàn)ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)