2012-06-11 10 views
11

Sto compilando un modulo con PHP e desidero mantenere la registrazione degli indirizzi IP dell'utente. Questo è l'insulsa-it del codice che ho usato:

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

Quando apro il codice in XAMPP e ho letto la fonte, il valore ha avuto un indirizzo IP diverso da quello che era mio:

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

Questo indirizzo IP si verifica normalmente quando lo uso in un localhost (XAMPP)?
In caso contrario, esistono alternative per l'acquisizione dell'indirizzo IP dell'utente?

risposta

18

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

non lo faccio. Richiedi la richiesta da $_SERVER quando il modulo viene inviato. Acquistarlo quando il modulo viene generato e memorizzarlo nel modulo offre semplicemente alle persone l'opportunità di cambiarlo.

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

Sì. Ottenere l'indirizzo IP locale (IPv6) è normale quando si richiede una pagina da localhost.

+0

Thx per il suggerimento sul cambiarlo quando inviato;) – zeldarulez

+0

E se qualcuno cambia il suo indirizzo ip in qualche modo (come usare VPN o altro)? Quindi non otterrò l'IP corretto di quel PC. è? – partho

4

':: 1' è la versione IPV6 di localhost (o 127.0.0.1).

Aprire la porta 80 e visitare la pagina dal proprio indirizzo IP. Dovrebbe funzionare bene allora :).

1

Questo è in realtà il tuo IP. Anche se il tuo IPv6 IP e non IPv4.

In IPv6, :: 1 sta per localhost/127.0.0.1.

25

IP ::1 è "localhost" nella versione IPv6. La tua macchina è configurata con IPv6 - e quindi stai ricevendo questo indirizzo IP. Probabilmente, quando si distribuisce l'applicazione sul server live, IPv6 non verrà configurato sul server e l'app avrà un indirizzo IPv4 più familiare (ad esempio aaa.bbb.ccc.ddd).

In un'altra nota, $_SERVER['REMOTE_ADDR'] potrebbe non sempre contenere l'indirizzo giusto. È meglio utilizzare:

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

Thx per la punta! Lo terro 'a mente. ;) – zeldarulez

+3

Tardativo, ma tenere a mente anche se si utilizza HTTP_X_FORWARDED_FOR, non ci si può fidare di questo per consentire solo l'accesso agli IP locali per le pagine di amministrazione sicure, perché quella testata può essere falsificata molto facilmente. In effetti, StackOverflow una volta cadde vittima di questa stessa cosa e fortunatamente un utente amichevole lo riferì a loro. – smdrager

+0

@smdrager: qual è il modo sicuro per ottenere l'indirizzo IP della macchina utente? Devo consentire alla mia pagina di aprirsi solo per un singolo IP. – sqlchild

4

1). Non è necessario aggiungere <?php echo $_SERVER['REMOTE_ADDR']; ?> al modulo. In questo caso è facile da forgiare (in realtà è facile in ogni caso). Meglio aggiungere IP ai dati sul lato server.

2) È anche possibile vedere $_SERVER['HTTP_X_FORWARDED_FOR']. Se l'utente ha un proxy, alcuni di essi (proxy trasparenti) posizionano l'IP dell'utente reale lì.

3) Nota: i dati relativi agli IP non sono affatto affidabili.

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']; 
      } 

Questo codice restituisce l'ip del client. Se pensi che questo sia l'IP del server, probabilmente hai ragione perché il tuo server è (presumibilmente) ospitato sul tuo pc. Dato che il tuo client (il pc) e il server girano sullo stesso PC, entrambi hanno lo stesso IP. Se non lo capisci, dovresti davvero fare qualche ricerca su ips, local ips e tutto il resto.

Problemi correlati