我已激活
HostnameLookups Double
在我的Apache2配置中,这样我就可以存储用户的远程主机,并确保他们的IP地址是真实的而不是欺骗性的。
然而,我注意到,对于我的很多'用户'(人们输入表单),$ _SERVER ['REMOTE_HOST']只是空的(而对于大多数其他人来说,它是非空的),尽管有上述配置。这是否意味着这些用户拥有欺骗性IP地址,或者这些仍然是诚实和普通用户?还有什么可以解释这个?
答案 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.