我们收到了来自开发人员的PHP代码,其中包含仅依赖于$_SERVER['HTTP_REFERER']
的web-stats脚本。使用cURL,您可以轻松伪造它如下:
curl_setopt($curl, CURLOPT_REFERER, "client website");
我正在寻找一种方法来阻止它。这甚至可以由客户网站完成,以获得更高的统计数据。我正在寻找一种方法来防止这种欺骗。这有可能吗?如果是这样,怎么能实现呢?
答案 0 :(得分:11)
根据HTTP spec,HTTP_REFERER
是可选的。默认情况下,某些防火墙软件包会将其删除,某些客户端不会发送引用值,并且有很多方法(例如您在问题中显示的方法)来修改此值。
简而言之,HTTP_REFERER
值无法信任。总会有一些方法来修改这些值。这在PHP manual documentation for $_SERVER
(强调我的)中提到:
将用户代理引用到当前页面的页面地址(如果有)。这是由用户代理设置的。并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能。 简而言之,它无法真正被信任。
要回答您的问题:不,有没有方法可以防止HTTP_REFERER
值被更改。我建议您在使用之前仔细检查该值(可选择在其上应用htmlspecialchars()
以防止注入)或根本不使用它。不幸的是,这是一个“接受或回家”的交易。
答案 1 :(得分:0)
关于这种referrer
磨炼你无能为力。所有web-stats
脚本都依赖于此referrer
。甚至包括google-analytics在内的巨型web-stats
网站也被这个假的referrer
所欺骗。
可能是检查引荐来源网址的好方法。我的意思是访问推荐人并检查您的网址是否存在。但当然它耗时,速度慢,而且还需要很大的带宽。但是,这还不足以克服这个问题。
在追溯推介人网址时,您无法找到链接的几个问题:
如果推荐的网址在会话后面怎么办?例如一个链接 来自雅虎,谷歌或私人论坛等电子邮件。
如果网址来自javascript
链接/点击该怎么办?
来自iframe
的链接也是javascript
链接。