PHP HTTP 引荐来源网址

Posted

技术标签:

【中文标题】PHP HTTP 引荐来源网址【英文标题】:PHP HTTP Referrer 【发布时间】:2011-07-15 11:47:45 【问题描述】:

我有一个接受来自远程站点的 POST 的页面。我想检测这些 POST 来自的域。我意识到它可以被欺骗,但总比没有好。 我尝试访问 HTTP_REFERER 变量,但它只返回 null。

该页面接受来自 PayPal(即时支付通知)和其他支付网关等来源的 POST。

如何获得转介电话?

【问题讨论】:

这是一个错字,但显然不是你的en.wikipedia.org/wiki/HTTP_referrer http 是无状态协议,理解这一点,不要依赖浏览器设置的东西 完全同意您的观点,除非按照人们的建议进行身份验证,否则不会处理任何 IPN。我只是想知道请求来自哪里,这样我就知道要使用哪种身份验证。 【参考方案1】:

您正确拼写了Referer。应该是:

$_SERVER['HTTP_REFERER']

【讨论】:

Referrer 是英文单词,但在 php 中是Referer。 有趣的事实:referrer 的拼写错误源于计算机科学家 Phillip Hallam-Baker 最初提议将该字段合并到 HTTP 规范中。[4]拼写错误在将其纳入征求意见标准文档 RFC 1945 时就已确定;文档的合著者 Roy Fielding 指出,当时的标准 Unix 拼写检查器都没有识别出“referrer”和拼写错误的“referer”。来源:[en.wikipedia.org/wiki/HTTP_referer]【参考方案2】:
$_SERVER['HTTP_REFERER'] 

使用单个 R,尝试 var_dump($_SERVER) 了解更多信息。

【讨论】:

谢谢,这是问题中的错字。仍然没有返回代码中的任何内容。奇怪! 它可能只是为空。并非所有浏览器都会发送引荐来源网址【参考方案3】:

您说得对,引荐来源网址很容易被欺骗,但是有更好的解决方案。阅读他们提到验证机制的ipn documentation。永远不要相信用户。

【讨论】:

谢谢。已正确实施 IPN。但我想使用同一页面过滤贝宝以外的其他 IPN。因此,使用referer 似乎是一种合乎逻辑的方式。有什么建议可以做到吗?【参考方案4】:

这对我很有效:

https://***.com/a/17958676/2635701

<form action="http://www.yourdomain.com/subscribe" 
   method="POST" 
   onsubmit=
      "document.getElementById('www.yourdomain.com.referrer').value=window.location;" >
    <!-- hidden input for field starts with a domain registered by you 
    just so that it's unlikely to *** with anything else on the page -->
    <input type="hidden" id="www.yourdomain.com.referrer" name="referrer"/>
    your email: <input name="email" type="text"/>
    ... rest of form ...
    <input type="submit" value="Subscribe"/>
</form>

【讨论】:

如果javascript被禁用了怎么办?

以上是关于PHP HTTP 引荐来源网址的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中隐藏/欺骗引荐来源网址的最可靠方法是啥?

在 ASP.NET 中获取 HTTP 引荐来源网址

如何将自定义引荐来源发送到网址?

HTTP 引荐来源网址 - AWS、Sharepoint 和浏览器

使用.htaccess从404页面获取引荐来源网址

实施 HTTP 到 HTTPS 重定向,保留 Google Analytics(分析)引荐来源网址