1. 程式人生 > >跳轉漏洞的檢測和修復

跳轉漏洞的檢測和修復

漏洞描述 
服務端未對傳入的跳轉url變數進行檢查和控制,可能導致可惡意構造任意一個惡意地址,誘導使用者跳轉到惡意網站。
由於是從可信的站點跳轉出去的,使用者會比較信任,所以跳轉漏洞一般用於釣魚攻擊,通過轉到惡意網站欺騙使用者輸入使用者名稱和密碼盜取使用者資訊,或欺騙使用者進行金錢交易;
也可能引發的XSS漏洞(主要是跳轉常常使用302跳轉,即設定HTTP響應頭,Locatioin: url,如果url包含了CRLF,則可能隔斷了http響應頭,使得後面部分落到了http body,從而導致xss漏洞)。
 
漏洞檢測 
修改引數中的合法URL為非法URL,然後檢視是否能正常跳轉或者響應包是否包含了任意的構造URL 


漏洞修復的方法 

1,若跳轉的URL事先是可以確定的,包括url和引數的值,則可以在後臺先配置好,url引數只需傳對應url的索引即可,通過索引找到對應具體url再進行跳轉;
2,若跳轉的URL事先不確定,但其輸入是由後臺生成的(不是使用者通過引數傳人),則可以先生成好跳轉連結然後進行簽名,而跳轉cg首先需要進行驗證簽名通過才能進行跳轉;
3,若1和2都不滿足,url事先無法確定,只能通過前端引數傳入,則必須在跳轉的時候對url進行按規則校驗:即控制url是否是你們公司授權的白名單或者是符合你們公司規則的url:
   function checkURL ( sURL) {
       return (/^(https?:\/\/)?[\w\-.]+\.(yourDomainA|yourDomainB|yourDomainC)\.com($|\/|\\)/i).test(sUrl)||(/^[\w][\w\/\.\-_%]+$/i).test(sUrl)||(/^[\/\\][^\/\\]/i).test(sUrl) ? true : false;   
   }


4,XSS漏洞的注意事項 :跳轉url檢測中也加入了CRLF頭部注入漏洞的檢測邏輯, 具體就是在請求引數中加入了%0d%0a這種測試程式碼,需要對這些引數進行刪除處理(事實上:在判斷到一個引數中包含 %00 -> %1f 的控制字元時都是不合法的,需對其進行刪除)。