在PHP中检查引用者

在PHP中检查引用者,php,referrer,Php,Referrer,可以用PHP检查谁正在进入您的网站吗。我有一个web应用程序(用PHP编写),它应该只允许用户从某些特定网站进入。是否可以通过检查\u请求对象来获取推荐网站?如果是,如何检查?您需要检查$\u服务器阵列中的“HTTP\u REFERER”键。是的,但请记住,某些代理和其他东西会删除此信息,并且它很容易伪造。所以不要依赖它。例如,不要认为您的web应用程序是安全的,因为您检查了推荐人以匹配您自己的服务器 $referringSite = $_SERVER['HTTP_REFERER']; // i

可以用PHP检查谁正在进入您的网站吗。我有一个web应用程序(用PHP编写),它应该只允许用户从某些特定网站进入。是否可以通过检查
\u请求
对象来获取推荐网站?如果是,如何检查?

您需要检查$\u服务器阵列中的“HTTP\u REFERER”键。

是的,但请记住,某些代理和其他东西会删除此信息,并且它很容易伪造。所以不要依赖它。例如,不要认为您的web应用程序是安全的,因为您检查了推荐人以匹配您自己的服务器

$referringSite = $_SERVER['HTTP_REFERER']; // is that spelt wrong in PHP ?
如果只允许来自特定域的请求,则需要解析一些URL以获取顶级域。正如我所了解到的,这可以通过PHP实现


正如评论中所指出的,您还必须考虑www.example.com和example.com。

当您可以查看
$\u服务器['HTTP\u REFERER']
以获取引用站点时,不要在其上下注。浏览器设置此标题,很容易被欺骗

如果只有来自特定推荐人的人才能查看您的站点这一点很重要,那么不要使用这种方法。您必须找到另一种方法来保护您的内容,如basic auth。我不是说你不应该使用这种技术,只是要记住它不是傻瓜式的


顺便说一句,您还可以在apache级别阻止引用程序

你不能信任推荐人。尽管来自
$\u服务器
阵列,但它实际上是用户/浏览器提供的值,很容易伪造,使用Firefox之类的东西。

可能需要格外小心,因为您可能需要同时允许www.example.com和example.com,因为在大多数情况下,它是相同的东西。更不用说HTTP_REFERER不可信任。在php手册中,“这是由用户代理设置的。不是所有的用户代理都会设置这一点,有些代理提供修改HTTP_REFERER的功能。简言之,它不可信任。”是的,我知道它不可信任。REFERER在RFC中拼写错误,因此,在所有HTTP领域,它都是Referer而不是Referer是的,有一次因为使用HTTP\u Referer而犯了一个错误。我花了一段时间才弄明白出了什么问题-sYes FF不支持它。我正在寻找替代品。