Php $服务器[';远程主机';]对于某些用户为空
我已经激活了Php $服务器[';远程主机';]对于某些用户为空,php,spoofing,server-variables,Php,Spoofing,Server Variables,我已经激活了 HostnameLookups Double 在我的Apache2配置中,这样我就可以存储用户的远程主机,并确保它们的IP地址是真实的,而不是伪造的 然而,我注意到,对于我的许多“用户”(输入表单的人),尽管有上述配置,$\u服务器['REMOTE\u HOST']是空的(而对于大多数其他用户,它是非空的)。这是否意味着这些用户伪造了IP地址,或者这些用户仍然是诚实的普通用户?还有什么可以解释这一点呢?不是每个主机都有一个主机名:) 您可能想使用'REMOTE\u ADDR'只需
HostnameLookups Double
在我的Apache2配置中,这样我就可以存储用户的远程主机,并确保它们的IP地址是真实的,而不是伪造的
然而,我注意到,对于我的许多“用户”(输入表单的人),尽管有上述配置,$\u服务器['REMOTE\u HOST']是空的(而对于大多数其他用户,它是非空的)。这是否意味着这些用户伪造了IP地址,或者这些用户仍然是诚实的普通用户?还有什么可以解释这一点呢?不是每个主机都有一个主机名:) 您可能想使用
'REMOTE\u ADDR'
只需使用以下命令:
if(isset($_SERVER['REMOTE_HOST'])){//check
$ip = $_SERVER['REMOTE_HOST'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;
引用Apache文档: 值Double表示执行双反向DNS查找。就是, 执行反向查找后,将执行正向查找 根据这个结果执行。中至少有一个IP地址 正向查找必须与原始地址匹配。(在“tcpwrappers”中) 术语这称为偏执狂。) 我怀疑如果正向查找不匹配,那么字段将保留为空 正如@avnr所说,IP地址并不总是有PTR记录 在任何情况下,都不能确保IP没有被欺骗,它只是确保原始IP的DNS配置有一个PTR和一个记录匹配。试试这个 $ip=getenv('REMOTE_ADDR');而不是$_SERVER['REMOTE_ADDR']
使用远程地址怎么样?嗯。。。我如何确保IP不会被欺骗?如果有必要的话,我已经在使用https了。你不能确保IP是真实的。通常,攻击者会欺骗以避免被您的服务器应答所欺骗,也可能欺骗IP以在您的服务器(以及其他人)的帮助下对该IP进行DOS。对于论坛帖子,他可能欺骗发送垃圾邮件并返回其真实地址(或代理地址)之后查看其“欺骗”发送的正确结果。
REMOTE\u HOST
server变量用于IP/主机名验证,而不是用于查找客户端的IP地址。是否使用$REMOTE\u HOST=$\u server['REMOTE\u HOST']$_服务器['REMOTE_ADDR']代码>或gethostbyaddr($\u服务器[“远程地址])
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.