打开重定向保护


Open Redirect Protection

Google的网站管理员博客写了一些关于如何防止开放重定向保护滥用的解决方案,我对那里的一些解决方案感到困惑已经有一段时间了,我尝试谷歌搜索但没有发现任何结果。

  1. 更改重定向代码以检查引用
  2. 考虑使用白名单
  3. 考虑为重定向签名
  4. 明确禁止站外重定向

我对解决方案的猜测:

  1. 使用 %{HTTP­_RE­FERER} 在 url 请求中进行一些检查
  2. 在 url 请求中使用一些正则表达式来检查 url 中的站点是否请求在正则表达式的范围内
  3. 想不出任何
  4. 想不出任何

如果我的猜测是正确的,请告诉我如何在PHP或Apache中正确做到这一点。谢谢!

  1. 正确,但这不是一种可靠的方法。HTTP Referrer可以纵。
  2. 定义允许重定向到的 URL 列表,与此列表进行比较并取消重定向到任何其他 URL。
  3. 添加重定向的加盐哈希作为重定向参数。在重定向之前,请使用请求参数检查该哈希。如果计算出的哈希与请求参数中的哈希相同,则可能没有进行请求操作 ->可以执行重定向。这可以防止执行任何重定向,除非有人猜测您的哈希生成算法(这就是为什么您必须使用密钥对其进行加盐的原因)。
  4. 取消所有重定向,这将导致任何不包含您的网站作为主机的URL。这可以使用正则表达式来完成,正如您在 2 处猜测的那样。

当您的应用程序根据用户提供的内容(即通过 POST 或 GET)执行盲重定向时,可以进行开放重定向。开放重定向最常被网络钓鱼攻击利用。

若要防止打开重定向,应验证并验证重定向到的任何 URL(如果 URL 来自用户输入)。应根据白名单进行验证。