安全测试之未验证的重定向(redirectUrl)和转发

一、URL重定向和转发的区别

  1. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)

  2. 转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)

二、未验证的redirectUrl和转发的概念

在Web应用中重定向是非常普遍的,并且通常情况下,重定向所引向的目的是带有用户输入参数的目的URL,而如果这些重定向未被验证,而攻击者就可以引导用户访问他们所要用户访问的站点。
转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时候是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以通过其来绕过认证或是授权检查。

三、未验证的redirectUrl和转发的影响

未验证的重定向和转发可能会使用户进入钓鱼网站,窃取用户信息等,对用户的信息以及财产安全造成严重的威胁。

四、未验证的redirectUrl的实例

如:

http://www.example.com/member/login.jhtml?redirectUrl=http://www.shit.com/shit/a.asp

该链接没有限制redirectUrl,免登陆获取了用户nick后返回给了第三方网站造成了漏洞的利用。

五、未验证的redirectUrl和转发的测试方法

  1. 如果有代码:浏览代码中含有重定向和转发的内容,看目的url中是否包含用户输入的参数,如果包含,观察目标参数是否在白名单之内,如果涉及到一些安全问题隐私等,需要重新定义目的URL。

  2. 通过点击操作网站,观察是否产生重定向(HTTP响应代码300-307,通常是302),观察在重定向之前用户输入的参数有没有出现在某一个URL或者很多URL中,如果是这种情况,需要改变URL的目标。

  3. 如果测试中没有代码,检查所有参数,测试那些看起来像是重定向或者转发的页面。

举例:
对于上例:
登陆url: http://www.example.com/member/login.jhtml
在url后加参数如下:
http://www.example.com/member/login.jhtml?redirectUrl=http://www.google.cn
若跳转至Google就是没有做跳转的限制。

六、未验证的redirectUrl和转发的防御措施

  1. 尽量避免使用重定向和转发机制,如果使用了,那么在定义目标URL的时候不要包含用户参数。

  2. 如果一定要保护用户输入的参数,那么:
    对每个参数都必须进行验证以确保它的合法性和正确性,或是在服务端提供映射机制,将用户的选择参数转变为真正的白名单目标页面。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值