2

我已经激活

HostnameLookups Double

在我的 Apache2 配置中,这样我就可以存储用户的远程主机并确保他们的 IP 地址是真实的并且没有被欺骗。

但是,我注意到对于我的很多“用户”(输入表单的人)来说,尽管有上述配置,但 $_SERVER['REMOTE_HOST'] 只是空的(而对于大多数其他人来说,它是非空的)。这是否意味着这些用户具有欺骗性 IP 地址,或者这些用户仍然是诚实的普通用户?还有什么可以解释这一点?

4

4 回答 4

3

并非每个主机都有主机名 :)

您可能想使用'REMOTE_ADDR'

于 2015-01-06T10:20:46.373 回答
3

引用 Apache 文档:

Double 的值是指进行双反向 DNS 查找。也就是说,在执行反向查找之后,然后对该结果执行正向查找。正向查找中至少有一个 IP 地址必须与原始地址匹配。(在“tcpwrappers”术语中,这称为 PARANOID。)

我怀疑如果正向查找不匹配,则该字段为空。

正如@avnr 所说,IP 地址并不总是有 PTR 记录。

并且在任何情况下都不能确保 IP 没有被欺骗,它只是确保原始 IP 的 DNS 配置具有 PTR 和 A 记录匹配。

于 2015-01-06T10:25:04.343 回答
0

只需使用这个:

if(isset($_SERVER['REMOTE_HOST'])){//check
    $ip = $_SERVER['REMOTE_HOST'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;
于 2015-01-06T10:22:32.053 回答
0

试试这个

$ip = getenv('REMOTE_ADDR'); 而不是 $_SERVER['REMOTE_ADDR'];

 getenv() is used to get the value of an environment variable in PHP
 $_SERVER is an array contains server variables created by the web server.
于 2015-01-06T10:27:53.573 回答