我阅读了很多关于此主题的文章,包括关于开放重定向的OWASP PAGE和Google blog article ...
我也在open redirects here on stack overflow上发现了这个问题,但它是一个不同的问题
我知道为什么我不应该重定向...这对我来说很有意义。
但我真的不明白:重定向和将其置于普通<a href
链接之间的区别在哪里?
也许有些用户正在查看状态栏,但我认为当他们点击链接时,大部分用户都没有真正关注状态栏。
这真的是唯一的原因吗?
就像这个article他们写道:
<a href="http://bank.example.com/redirect?url=http://attacker.example.net">Click here to log in</a>
用户可能会认为该链接是安全的,因为该网址是以其受信任的银行bank.example.com开头的。但是,用户将被重定向到攻击者的网站(attacker.example.net),攻击者可能会将其显示为与bank.example.com非常相似。然后,用户可能无意中将凭证输入攻击者的网页并破坏他们的银行账户。在不验证重定向地址是可信站点的情况下,Java servlet永远不应将用户重定向到URL。
所以,如果你有类似留言簿的东西,用户可以将链接放到他们的主页,那么唯一的区别是链接没有被重定向,但它仍然会进入邪恶的网页。
我看到这个问题了吗?
答案 0 :(得分:2)
根据我的理解,重定向并不是问题所在。这里的主要问题是允许包含绝对URL的重定向(目标可能由用户控制)。
url是绝对的(意味着它开始http://host/etc
),这意味着您无意中允许跨域重定向。这与传统的XSS漏洞非常相似,因此可以反映javascript以进行跨域调用(并泄露域名信息)。
因此,据我所知,修复大多数这类问题的方法是确保相对于root完成任何重定向(在服务器上)。然后,用户控制的查询字符串值无法转到其他位置。
这会回答您的问题还是只创建更多?
答案 1 :(得分:2)
主要问题是攻击者可能使URL看起来值得信赖,因为它实际上是受害者信任的网站的URL,即。即 bank.example.com
重定向目标不需要像示例中那样明显。实际上,攻击者可能会使用其他技术来欺骗用户甚至Web应用程序(如果需要),使用特殊编码parameter pollutioning和其他欺骗合法URL的技术。
因此,即使受害者在点击链接或请求其资源之前非常注重检查URL,否则他们可以验证的是,该URL指向可靠的网站 bank.example.com < / em>的。仅此一点就足够了。