Php 找到http引用者的另一种方法?

Php 找到http引用者的另一种方法?,php,apache,logging,tor,http-referer,Php,Apache,Logging,Tor,Http Referer,我有一个带有Apache2、PHP和Tor(隐藏服务)的虚拟linux。我想找到HTTP推荐人。现在我知道$\u服务器['HTTP\u REFERER']不可靠,不应该使用。我甚至亲自测试过: file_put_contents("rfrs.log", $_SERVER['HTTP_REFERER'] . " \r\n", FILE_APPEND | LOCK_EX); 结果是一个带有我自己洋葱地址的文件,尽管我点击了一些搜索引擎的链接。到目前为止,这并不奇怪。问题是,查看Apache的

我有一个带有Apache2、PHP和Tor(隐藏服务)的虚拟linux。我想找到HTTP推荐人。现在我知道$\u服务器['HTTP\u REFERER']不可靠,不应该使用。我甚至亲自测试过:

file_put_contents("rfrs.log", $_SERVER['HTTP_REFERER'] . " \r\n", 
  FILE_APPEND | LOCK_EX);
结果是一个带有我自己洋葱地址的文件,尽管我点击了一些搜索引擎的链接。到目前为止,这并不奇怪。问题是,查看Apache的access.log,除了所有的“127.0.0.1”(这意味着Tor正在工作),我确实看到了正确的引用域!那个搜索引擎的洋葱地址就在那里

我如何访问这些信息以供php使用?
最好的方法是什么?

好吧,奇怪的是,它开始工作了!有一些奇怪的行为。self域存储在一个包含的php文件中,不知怎么地,它被取消了。而测试(strpos($\u SERVER['HTTP\u REFERER',$mydomain)>-1)并没有按照我想要的那样运行。 所以我做了两件事:1。我将测试和文件编写代码移到“include”下的右侧。2.我获取了“HTTP_REFERER”结果,并使用strpos和substr将其剪切,然后就!==$我的域名

我仍然对它为什么有效感到困惑,但它确实有效! 谢谢大家:)


我当然还有很多东西要学

PHP从Apache(基于HTTP请求)获取其值
$\u SERVER['HTTP\u REFERER']
。这不是在PHP中填充,而是在同一请求的访问日志中看到的吗?只要客户端没有欺骗它并且浏览器设置了它,它就是可靠的。只是不能保证它会被设置,或者它是真实和准确的。是的,它是同一个请求。您如何将Tor请求代理给Apache?如果您使用洋葱地址设置虚拟主机并使用
HiddenServicePort 80您的.Onion.vhost.ip:80
按照文档所述进行设置,Referer将正常工作,使用80 127.0.01:80,而apache只能从localhost访问。您的应用程序是否在初始URL和您记录引用者的位置之间进行了某种内部重定向?这是我能想到的唯一原因,为什么你会在支票上看到你自己的洋葱地址作为推荐人。我用一个隐藏的服务测试了这一点,
$\u服务器['HTTP\u REFERER']
正确地反映了引用站点的服务,而不是我自己的地址/URL。