Web应用程序经常将用户界面重定向和转至其他网页或网站,如果处理不当,用户会被攻击者利用重定向转至不可信的数据页面所欺骗,带来不必要的损失。
一般情况下,会将登录后需要跳转的地址"http://www.c.com/index.php"放到登录页面的参数中,如图1:
图1 登录跳转页面
登录成功后,如果没有得到适当验证,攻击者可以重定向目标用户到钓鱼软件或恶意网站,使用转发链接来使目标用户访问未经过授权的页面,这可能导致恶意软件的安装或者用户密码等敏感信息的泄露。
不安全的转发可能允许绕过访问控制,如下是URL跳转示例。示例中有一个名为"index.php"页面,该页面有一个参数名是“url”。攻击者精心制作了一个URL将用户重定向到其他网站。
$url=$_GET['url'];
header("Location:$url");
即使登录界面相同,但如果URL不一样(见图1和图2),那么跳转界面也会不一样。当用户在浏览器中输入或者从邮件中点击攻击者发送过来的地址“http://www.a.com/login/index.php?url=http://www.c.com”后(“http://www.c.com”仅为示例),会被引导到攻击者想让用户访问的页面上,如图3所示。如果是攻击者精心构造的恶意地址,用户很有可能被执行钓鱼攻击并安装恶意程序。
图2 用户实际输入的地址
图3 用户被引导跳转后的实际页面
在控制页面转向的地方校验传入的URL是否为可信域名,通常采用URL白名单机制。该机制可以有效地防止任意跳转。
$whithList = array('localhost','localhost');
$url=$_GET['url'];
if(in_array($url,$whithList){
header("Location:$url");
}else{
exit("<center><h3>非法域名请求<h3></center>");
}
图4是添加白名单后的执行结果,成功地阻止了页面跳转。
图4 阻止URL跳转漏洞
原文始发于微信公众号(船山信安):原创 | URL重定向安全
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论