如果我使用预定义URL';的数组,$_SERVER[';HTTP_REFERER';]是否危险;s进行


Is $_SERVER['HTTP_REFERER'] dangerous, if I use a array of predefined URL's for validation?

我正在为我的应用程序创建登录页面。当用户想转到"myaccount.php"但没有登录时,他会重定向到login.php。

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

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

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

在这种情况下,重定向到$_SERVER['HTTP_REFERRER']并不是特别危险,因为如果最终用户正在做一些恶意的事情,他最终会重定向到恶意注入的引用程序。只要你在每个脚本的开头检查权限,用户就不可能访问你网站上他不应该访问的区域(比如管理控制台)。然而,如果您未能检查每个脚本的权限,并且用户制作了一个虚假的referrer标头,那么它可能会被用来直接进入您网站上不应该访问的区域。

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

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

我认为与此相关的两个最常见的缺陷是标头注入和开放重定向

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

$_SERVER["HTTP_REFERER"]并不危险,它只是由攻击者控制的。除非你信任它授予某人额外的权限,否则它不会伤害你(例如,不要认为刚从successful-login.php来的人已经成功登录!)

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