$ _SERVER [‘REMOTE_HOST’] пуст для некоторых пользователей

Я активировал

HostnameLookups Double

в моей конфигурации Apache2, чтобы я мог хранить удаленные хосты пользователя и быть уверенным, что их IP-адреса реальны и не подделаны.

Тем не менее, я заметил, что для довольно многих моих «пользователей» (людей, вводящих форму), $ _SERVER [‘REMOTE_HOST’] просто пуст (в то время как для большинства других он не пуст), несмотря на указанную выше конфигурацию. Означает ли это, что эти пользователи подделали IP-адреса, или они все еще могут быть честными и обычными пользователями? Что еще может объяснить это?

2

Решение

Не у каждого хоста есть имя хоста 🙂

Вы, вероятно, хотели использовать 'REMOTE_ADDR'

3

Другие решения

Цитата из документации Apache:

Значение Double относится к выполнению двойного обратного поиска DNS. То есть,
после обратного поиска, прямой поиск тогда
выполнено на этом результате. По крайней мере, один из IP-адресов в
прямой поиск должен соответствовать исходному адресу. (В терминологии «tcpwrappers» это называется PARANOID.)

Я подозреваю, что если прямой поиск не совпадает, то поле остается пустым.

Как сказал @avnr, не всегда есть запись PTR для IP-адреса.

И в любом случае, который не гарантирует, что IP-адрес не был подделан, он просто гарантирует, что в конфигурации DNS исходного IP-адреса есть PTR и A-запись.

3

Попробуй это

$ 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.
0

Просто используйте это:

if(isset($_SERVER['REMOTE_HOST'])){//check
$ip = $_SERVER['REMOTE_HOST'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];//else assign the real IP
}
echo $ip;
0
По вопросам рекламы [email protected]