【问题标题】:Difficulties in storing referring site name and ip address存储引用站点名称和 IP 地址的困难
【发布时间】:2017-05-24 12:11:13
【问题描述】:

我的场景是这样的:第一个站点通过 php curl 将带有各种参数的请求作为查询字符串发送到第二个站点。第二个站点类方法通过对传入参数的各种比较来处理请求,并通过这种方式将一些数据与引用站点(第一个站点)名称和 IP 地址一起存储在表中 -

$url = parse_url($_SERVER['HTTP_REFERER']);
$ref_site = $url['host'];
$ref_site_ip = gethostbyname($ref_site);

但是当我测试它时它在我的生产服务器中不起作用,$ref_site 和 $ref_site_ip 变量没有价值,这意味着 $_SERVER['HTTP_REFERER'] 由于多种原因无法正常工作,可能是因为第一个站点的 curl 请求....

以下是否正常工作?

$_SERVER['REMOTE_ADDR'], $_SERVER['REMOTE_HOST']

$_SERVER['REMOTE_ADDR'] 看起来我看到了一个 IP 地址,我没有完全验证它是引用站点(第一个站点)IP 还是第二个站点 IP,如果可能的话,我会尽快更新它。

现在我可以通过哪些其他方式获得引用站点名称和 IP?

仅供参考,我无法控制第一个站点代码,因为这些站点将属于不同的用户,并且这些站点代码使用 curl 发送请求,我绝对知道这些是我已知的 cms 站点。

【问题讨论】:

  • 我没有完全明白你需要什么..但我认为第一个站点应该将$_SERVER['http_referer'] 发送到第二个站点,这样你就可以得到 th
  • 我描述得很好,可能是第一个没有发送带有 curl 请求的 $_SERVER['http_referer'] 的站点,所以它是空的。现在没有办法获得至少一个推荐人 IP 吗?
  • 可能使用 php-fpm 进行开发(称为 $_SERVER['http_referer']),并在 prod 服务器上使用 apache mod_php(称为 apache_request_headers()['http_referer']
  • 没有相同的结果,remote_addr 显示了一个 IP 地址,我试图将其转换为站点名称,但所有方式都失败了。所以:(
  • 当 http_referer 服务器变量不工作时,没有办法捕获引用站点名称和 ip?

标签: php curl joomla3.0 http-referer


【解决方案1】:

您以后可以像这样在.htaccess 中使用 IP 保护。

这将阻止文件夹cron中的所有文件

<FilesMatch "cron\.php$">
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/24
</FilesMatch>

这只会阻止名称为cron.php的文件

<Files "cron.php">
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/24
</Files>

现在是您的安全。最好的方法是为每个查询创建哈希。例如在发送请求的文件中。

$time = time();
$secret = 'MySecretWord';
// Your IP address that will be detected in $_SERVER['REMOTE_ADDR'] on accepting server
$ip = '10.10.10.10'; 
$hash = md5($time.$ip.$secret);

现在您将这个$hash$time 包含在GET 请求中。并在接受网站上

$ip = $_SERVER['REMOTE_ADDR']
$time = $_GET['time'];
$secret = 'MySecretWord';
$hash = md5($time.$ip.$secret);

if($hash != $_GET['hash'])
{
    echo "Back off a*hole!";
    exit;
}

【讨论】:

  • 您好,感谢您的回答,您能否在回答中详细说明我的问题,因为我没有完全理解。当 $_SERVER['HTTP_REFERER'] 值为空时,我想获取引用站点名称和 IP?。
  • 假设您想保护并确保只处理来自特定服务器的查询。而且你不应该使用推荐人。这是最容易伪造的标题。
  • 你的意思是把一些代码放在第一个站点从哪里请求到第二个站点?正如我所说,这是不可能的,因为第一个站点是我无法编码的 cms 站点。
  • 然后编辑您的主题并显示它发送的完整请求。它包含的所有参数和所有标题。然后我们就可以想办法了。
  • 我会尝试,因为我暗示在 curl 请求的第一个站点中没有设置 http 引荐来源的标头,因此在第二个站点中它没有被捕获
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2010-10-02
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多