1

我阅读了很多关于这个主题的文章,包括OWASP PAGE和关于开放重定向的谷歌博客文章......我还在堆栈溢出
时 发现了这个关于开放重定向的问题,但它是一个不同的问题

我知道为什么我不应该重定向......这对我来说完全有意义。

但我真的不明白:重定向和将其放入普通<a href链接之间到底有什么区别?
也许有些用户正在查看状态栏,但我认为他们中的大多数人在单击链接时并没有真正查看状态栏。
这真的是唯一的原因吗?就像在这篇文章中他们写道:

<a href="http://bank.example.com/redirect?url=http://attacker.example.net">Click here to log in</a>

用户可能会认为该链接是安全的,因为 URL 以他们信任的银行 bank.example.com 开头。但是,用户随后将被重定向到攻击者的网站 (attacker.example.net),攻击者可能使该网站看起来与 bank.example.com 非常相似。然后,用户可能会在不知情的情况下将凭据输入攻击者的网页并危及他们的银行帐户。Java servlet 永远不应在未验证重定向地址是否为受信任站点的情况下将用户重定向到 URL。

因此,如果您有类似留言簿之类的东西,用户可以在其中放置指向其主页的链接,那么唯一的区别是链接不会被重定向,但它仍然会转到邪恶的网页。

我看到这个问题了吗?

4

2 回答 2

2

据我了解,重定向不是问题。这里的主要问题是允许包含绝对 url 的重定向(目标可能由用户控制)。

url 是绝对的(意味着它开始http://host/etc)这一事实意味着您无意中允许跨域重定向。这与经典的 XSS 漏洞非常相似,通过这种漏洞可以反射 javascript 以进行跨域调用(并泄露您的域的信息)。

因此,据我了解,解决大多数此类问题的方法是确保(在服务器上)任何重定向都是相对于根目录完成的。那么用户控制的查询字符串值就没有办法去别的地方了。

这会回答你的问题还是只是创造更多?

于 2012-03-11T00:35:50.083 回答
2

主要问题是攻击者有可能使 URL 看起来是可信的,因为它实际上是受害者信任的网站的 URL,即。e. 银行.example.com

重定向目标不需要像示例中那样明显。实际上,攻击者可能会使用进一步的技术来欺骗用户,甚至可能在必要时使用特殊编码、参数污染和其他技术来欺骗 Web 应用程序来欺骗合法的 URL。

因此,即使受害者非常注重安全,在单击链接或请求其资源之前检查 URL,他们所能验证的只是该 URL 指向可信赖的网站bank.example.com。仅此一项就足够了。

于 2012-03-11T07:29:37.417 回答