Arch
Новичок
Дата регистрации:
24.12.2011 12:03:43
Сообщений: 11
Хочется для себя уточнить небольшой момент по определению IP адреса пользователя.
Самый распространенный способ в гугле выглядит приблизительно так:
function GetRealIp()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Так как HTTP_ может присылать любые заголовки, то не факт что в HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR будет корректный IP(если он там вообще будет). Опять-же заголовки можно подменить подставив "левый" адрес.
Но REMOTE_ADDR будет содержать только последний ip из всей цепочки роутеров и серверов от клиента, что может быть не очень приятно для пользователей какого либо крупного провайдера если допустим в голосовании кто то уже голосовал из его подсети и IP записался в БД.
Так вот интересно, что бы Вы посоветовали, оставить определение только по REMOTE_ADDR, или все таки стоит проверять и заголовки, предварительно проверив их на корректность IP адреса через регулярные выражения?