Tengo un script sencillo que determina la dirección IP del usuario:
function GetIp(){
if (!empty($_SERVER['HTTP_CLIENT_IP']))
//check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
//to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Ahora en la red algún lugar vi a alguien usando este script:
if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != '')
$Ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '')
$Ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] != '')
$Ip = $_SERVER['REMOTE_ADDR'];
Me preguntaba si mi aplicación se rompe .. ¿Debo verificar si el valor de $_SERVER['HTTP_CLIENT_IP']
, $_SERVER['HTTP_X_FORWARDED_FOR']
o $_SERVER['REMOTE_ADDR']
está vacío? ¿O es realmente innecesario hacerlo?
¿Cuál es el propósito de esto? ¿Es de alguna manera relevante para la seguridad? Porque si lo es, 'REMOTE_ADDR' es el único que vale la pena. –
Depende. Recuerdo algunas compañías de hosting que tienen un proxy en frente de sus servidores y envían los proxies * local * IP que llevan a 'REMOTE_ADDR' siendo siempre algo así como' 10.0.0.1' ... Así que si querías obtener la IP de los clientes que tenía que ir con 'X_FORWARDED_FOR' – klaustopher