2015-01-06 6 views
0

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

HostnameLookups Double 

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

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

+0

Как насчет использования remote_addr? – JAL

ответ

1

Не каждый хост имеет имя хоста :)

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

0

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

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

echo $ip; 
1

из апача документации:

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

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

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

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

+0

Хм ... как бы я мог убедиться, что IP-адрес не подделан? Я уже на https, если это имеет значение. – user1111929

+0

Вы не можете гарантировать, что IP является реальным. Как правило, злоумышленник будет обманывать, чтобы не отвечать DOSed ответами вашего сервера, или он может подменять IP-адрес, чтобы сделать DOS для этого IP-адреса с помощью вашего сервера (наряду с другими). – Tensibai

+0

И для случая на форуме, он может подделать спам и вернуться с его реальным адресом (или проксифицированным) после того, как увидит правильный результат его «поддельной» отправки. – Tensibai

0

Попробуйте

$ ф = 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.