URL跳轉
1.由於應用越來越多的需要和其他的第三方應用交互,以及在自身應用內部根據不同的邏輯將用戶引 向到不同的頁面,譬如一個典型的登錄接口就經常需要在認證成功之後將用戶引導到登錄之前的頁面,整個過程中如果實現不好就可能導致一些安全問題,特定條件下可能引起嚴重的安全漏洞。
2.成因
對於URL跳轉的實現一般會有幾種實現方式:
(1)META標簽內跳轉
(2)javascript跳轉
(3)header頭跳轉
通過以GET或者POST的方式接收將要跳轉的URL,然後通過上面的幾種方式的其中一種來跳轉到目標URL。一方面,由於用戶的輸入會進入Meta,javascript,http頭所以都可能發生相應上下文的漏洞,如xss等等,但是同時,即使只是對於URL跳轉本身功能方面就存在一個缺陷,因為會將用戶瀏覽器從可信的站點導向到不可信的站點,同時如果跳轉的時候帶有敏感數據一樣可能將敏感數據泄漏給不可信的第三方。
譬如一個典型的登錄跳轉如下:
<?php
$url=$_GET[‘jumpto‘];
header("Location: $url");
?>
如果jumpto沒有任何限制,所以惡意用戶可以提交
http://@@@@@@r/login.php?jumpto=http:/@@@@@@
3.惡意用戶完全可以借用URL跳轉漏洞來欺騙安全意識低的用戶,從而導致“中獎”之類的欺詐,這對於一些有在線業務的企業如淘寶等,危害較大,同時借助URL跳轉,也可以突破常見的基於“白名單方式”的一些安全限制,如傳統IM裏對於URL的傳播會進行安全校驗,但是對於大公司的域名及URL將直接允許通過並且顯示會可信的URL,而一旦該URL裏包含一些跳轉漏洞將可能導致安全限制被繞過。
如果引用一些資源的限制是依賴於“白名單方式”,同樣可能被繞過導致安全風險,譬如常見的一些應用允許引入可信站點如youku.com的視頻,限制方式往往是檢查URL是否是youku.com來實現,如果youku.com內含一個url跳轉漏洞,將導致最終引入的資源屬於不可信的第三方資源或者惡意站點,最終導致安全問題。
4.a 通過url跳轉突破IM的安全校驗,從而傳播惡意URL
b 通過url跳轉欺騙交易用戶對URL的信任,從而實現欺詐
c 通過URL跳轉繞過應用程序對引用資源的限制,從而導致安全漏洞
d 借助未驗證的URL跳轉,可以將應用程序內部敏感的數據傳遞到不安全的第三方區域
5.理論上講,url跳轉屬於CSRF的一種,我們需要對傳入的URL做有效性的認證,保證該URL來自於正確的地方,限制的方式同防止csrf一樣可以包括:
1 referer的限制
如果確定傳遞URL參數進入的來源,我們可以通過該方式實現安全限制,保證該URL的有效性,避免惡意用戶自己生成跳轉鏈接
2 加入有效性驗證Token
我們保證所有生成的鏈接都是來自於我們可信域的,通過在生成的鏈接裏加入用戶不可控的Token對生成的鏈接進行校驗,可以避免用戶生成自己的惡意鏈接從而被利用,但是如果功能本身要求比較開放,可能導致有一定的限制。
本文出自 “大李子” 博客,謝絕轉載!
URL跳轉