2009-11-04 11 views
5

Hoy encontré un comportamiento bastante extraño de una aplicación basada en PHP. En una cierta parte del sistema hay una interfaz de usuario que hace uso de llamadas AJAX para llenar las cajas de la lista con contenido desde el back-end.php/ajax REMOTE_ADDR configurado como IP del adaptador de red falso

Ahora, el oyente AJAX realiza una comprobación de seguridad en todas las solicitudes entrantes, asegurándose de que solo las IP válidas de los clientes obtengan respuestas. La IP válida también se almacena en el backend.

Para obtener IP del cliente que utiliza el viejo y simple

$_SERVER['REMOTE_ADDR'] 

que funciona para la mayoría de los clientes. Hoy me encontré con una instalación en la que remote_addr contenía la dirección IP de un adaptador de red que no era la que realizaba la comunicación real para mi aplicación.

buscar en Google a mi alrededor agve Roshan's Blog entry on the topuic:

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

Por desgracia, el problema persiste.

¿Alguna vez alguien tropezó con este tipo de problema (en realidad no creo que descubrí un problema completamente nuevo ^^) y tengo una idea para mí sobre cómo solucionarlo?

EDIT:

Estoy en

  • Versión PHP 5.2.9-1
  • Apache/2.2.9 (Win32)

La comunicación se realiza a través de una tarjeta LAN normal. Ahora el cliente actual tiene varios dispositivos más. Adaptadores VMNet y tal.

Me pregunto cómo una configuración cliente puede un servidor web 'molestar' tanto ...

TIA

K

+1

puede poner aquí algunos detalles sobre los adoptantes y el servidor que ejecuta la aplicación ... me refiero a qué direcciones IP contienen. –

+0

pls ver a mi Además – KB22

+0

modo escenario de ejemplo podría tener este aspecto en el extremo del cliente: eth0 - 10.0.0.1 eth1 - 10.1.1.1 continuación, en el servidor u tiene 10.1.1.2 y cuando la solicitud pasa a través del cliente en lugar de 10,1 .1.1 muestra 10.0.0.1? –

Respuesta

4

Desafortunadamente, usted tiene que tener toda la información de IP con un grano de sal.

Las direcciones IP se recopilan durante la solicitud tomando el paquete y solicitando información en la cuenta. Tristemente, esta información puede ser fácilmente falsificada o incluso incorrecta (basada en una gran cantidad de probabilidades de red) y no debe utilizarse para nada más que para fines personales.

+0

Thx para este, pero ¿hay alguna mejor práctica que puedas recomendar? – KB22

+1

El código en su pregunta es lo que he visto como una "mejor opción". Capturará la IP correcta en la mayoría de los casos. Solo entiendo que no necesariamente confiaría en los resultados. –

+1

I C y aceptado, pero ¿podría usted por favor recomendar que algunos lean cómo REMOTE_ADDR etc. está configurado por apache? Me gustaría mucho entender lo que me está causando problemas. TIA – KB22

Cuestiones relacionadas