某些用户的$ _SERVER ['REMOTE_HOST']为空

时间:2015-01-06 10:17:35

标签: php spoofing server-variables

我已激活

HostnameLookups Double

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

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

4 个答案:

答案 0 :(得分:3)

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

您可能想要使用'REMOTE_ADDR'

答案 1 :(得分:3)

引用Apache文档:

  

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

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

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

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

答案 2 :(得分:0)

请使用:

if(isset($_SERVER['REMOTE_HOST'])){//check
    $ip = $_SERVER['REMOTE_HOST'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;

答案 3 :(得分: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.