Я активировал
HostnameLookups Double
в моей конфигурации Apache2, чтобы я мог хранить удаленные хосты пользователя и быть уверенным, что их IP-адреса реальны и не подделаны.
Тем не менее, я заметил, что для довольно многих моих «пользователей» (людей, вводящих форму), $ _SERVER [‘REMOTE_HOST’] просто пуст (в то время как для большинства других он не пуст), несмотря на указанную выше конфигурацию. Означает ли это, что эти пользователи подделали IP-адреса, или они все еще могут быть честными и обычными пользователями? Что еще может объяснить это?
Не у каждого хоста есть имя хоста 🙂
Вы, вероятно, хотели использовать 'REMOTE_ADDR'
Цитата из документации Apache:
Значение Double относится к выполнению двойного обратного поиска DNS. То есть,
после обратного поиска, прямой поиск тогда
выполнено на этом результате. По крайней мере, один из IP-адресов в
прямой поиск должен соответствовать исходному адресу. (В терминологии «tcpwrappers» это называется PARANOID.)
Я подозреваю, что если прямой поиск не совпадает, то поле остается пустым.
Как сказал @avnr, не всегда есть запись PTR для IP-адреса.
И в любом случае, который не гарантирует, что IP-адрес не был подделан, он просто гарантирует, что в конфигурации DNS исходного IP-адреса есть PTR и A-запись.
Попробуй это
$ 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.
Просто используйте это:
if(isset($_SERVER['REMOTE_HOST'])){//check
$ip = $_SERVER['REMOTE_HOST'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;