防止cURL Referrer欺骗

时间:2014-02-16 05:13:03

标签: php curl spoofing

我们收到了来自开发人员的PHP代码,其中包含仅依赖于$_SERVER['HTTP_REFERER']的web-stats脚本。使用cURL,您可以轻松伪造它如下:

curl_setopt($curl, CURLOPT_REFERER, "client website");

我正在寻找一种方法来阻止它。这甚至可以由客户网站完成,以获得更高的统计数据。我正在寻找一种方法来防止这种欺骗。这有可能吗?如果是这样,怎么能实现呢?

2 个答案:

答案 0 :(得分:11)

不,没有明确的方法来确定网址推荐人。

根据HTTP specHTTP_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链接。