如果我使用预定义URL的数组进行验证,$ _SERVER ['HTTP_REFERER']是危险的吗?

时间:2012-03-06 01:27:12

标签: php security xss

我正在为我的应用程序做一个登录页面。当用户想要访问“myaccount.php”但他没有登录时,他会被重定向到login.php。

登录成功后,我希望他被重定向到$_SERVER['HTTP_REFERER'],这将是我申请的各个页面。

我在论坛上看到['HTTP_REFERER']可能很危险。

但是如果我创建一个类似('myaccount.php','mycart.php'等等)的数组并将此数组与$_SERVER['HTTP_REFERER']进行比较,这将保护我免受恶意使用功能?

3 个答案:

答案 0 :(得分:5)

在这种情况下,重定向到$_SERVER['HTTP_REFERRER']并不是特别危险,因为如果最终用户做了恶意的事情,他最终会被恶意注入的引荐者重定向。只要您在每个脚本的开头检查权限,用户就无法访问您不应该访问的站点区域(如管理控制台)。但是,如果您未能检查每个脚本的权限,并且用户制作了错误的引荐来源标头,则可以将其用于指向您不应该访问的网站区域。

总的来说,HTTP_REFERRER并不是特定的危险源。它不能依赖于设置和保存正确的信息。

答案 1 :(得分:2)

  

我在论坛上看到['HTTP_REFERER']可能很危险。

我认为与此相关的两个最常见的缺陷是header injectionopen redirect

如果你只允许基于内部白名单URL的重定向,就像你建议的那样,那么我没有看到问题。

答案 2 :(得分:0)

$ _ SERVER [" HTTP_REFERER"]并不危险 - 它只是受到攻击者控制。它不会伤害你,除非你相信它给予某人额外的权限(例如,不要假设刚来自success-login.php的人已成功登录!)

重定向用户不会向用户授予任何特殊权限,因此将攻击者重定向到攻击者控制的字符串不会以任何方式损害服务器的安全性。