2012-06-11 40 views
11

Estoy haciendo un formulario con PHP y quiero mantener el registro de las direcciones IP del usuario. Este es el tijeretazo-it de código que he utilizado:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" /> 

Al abrir el código en XAMPP y leer la fuente, el valor tuvo una dirección IP diferente de lo que era mío:

<input type="hidden" name="ip" value="::1" /> 

¿Esta dirección IP normalmente ocurre cuando la uso en un servidor local (XAMPP)?
Si no, ¿hay alguna alternativa para tomar la dirección IP del usuario?

Respuesta

18

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

no hacen eso. Obtenga la solicitud de $_SERVER cuando se envíe el formulario. Obtenerlo cuando se genera el formulario y almacenarlo en el formulario solo le da a la gente la oportunidad de cambiarlo.

Does this IP address normally happen when I use it in a localhost (XAMPP)?

Sí. Obtener la dirección IP (IPv6) local es normal cuando solicita una página de localhost.

+0

Thx para la sugerencia de cambiarlo cuando se envía;) – zeldarulez

+0

¿Qué pasa si alguien cambia su dirección IP de alguna manera (como el uso de VPN o algo así)? Entonces no obtendré la IP correcta de esa PC. ¿Lo es? – partho

4

':: 1' es la versión IPV6 de localhost (o 127.0.0.1).

Abra el puerto 80 y visite la página desde su dirección IP. Debería funcionar bien, entonces :).

1

Esta es su IP. Aunque su IPv6 IP y no IPv4.

En IPv6, :: 1 significa localhost/127.0.0.1.

25

IP ::1 es "localhost" en la versión IPv6. Su máquina está configurada con IPv6 y, por lo tanto, obtiene esta dirección IP. Probablemente, cuando implemente su aplicación en el servidor en vivo, IPv6 no se configurará en el servidor y su aplicación obtendrá una dirección IPv4 más familiar (por ejemplo, aaa.bbb.ccc.ddd).

En otra nota, $_SERVER['REMOTE_ADDR'] puede no contener siempre la dirección correcta. Es mejor usar:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
    $ip_address = $_SERVER['REMOTE_ADDR']; 
} 
+0

¡Gracias por la propina! Lo tendré en mente. ;) – zeldarulez

+3

Retraso, pero también tenga en cuenta que si utiliza HTTP_X_FORWARDED_FOR, no puede confiar en que solo permita el acceso a las direcciones IP locales para las páginas de administración seguras, ya que ese encabezado se puede falsificar fácilmente. De hecho, StackOverflow una vez fue víctima de esto y, afortunadamente, un usuario amigable se lo informó. – smdrager

+0

@smdrager: ¿cuál es la forma segura de obtener la dirección IP de la máquina del usuario? Necesito permitir que mi página se abra solo para una sola IP. – sqlchild

4

1). No necesita agregar <?php echo $_SERVER['REMOTE_ADDR']; ?> al formulario. En este caso, es fácil de falsificar (en realidad es fácil en cualquier caso). Mejor agregar IP a los datos en el lado del servidor.

2) También puede consultar $_SERVER['HTTP_X_FORWARDED_FOR']. Si el usuario tiene un proxy, algunos de ellos (proxies transparentes) colocan allí la IP del usuario real.

3) A tener en cuenta: los datos sobre IP no son confiables en absoluto.

0
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') { 
       $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
      } else { 
       $ip_address = $_SERVER['REMOTE_ADDR']; 
      } 

Este código devuelve ip del cliente. Si crees que esta es la IP del servidor, probablemente tengas razón porque tu servidor (presumiblemente) está alojado en tu pc. Como su cliente (la pc) y el servidor se ejecutan en la misma computadora, ambos tienen la misma ip. Si no entiende esto, debería investigar un poco sobre ips, ips locales y todo eso.

Cuestiones relacionadas