2011-01-01 193 views
8

Ho uno script PHP in cui mi piacerebbe rilevare se l'utente è in esecuzione su un computer locale, non accessibile su Internet. Attualmente controllo l'indirizzo del server a 127.0.0.1. È questa la migliore pratica o c'è un modo migliore?Come rilevare se in esecuzione su localhost

+0

Questa è la pratica normale si, O in Windows 7 Host che utilizza IPV6 ':: 1', http://en.wikipedia.org/wiki/Localhost – RobertPitt

+0

Grazie a tutti - Non avevo considerato IPv6. Saluti. –

risposta

13

Localhost traduce sempre all'indirizzo di loopback IP 127.0.0.1 in IPv4, o ::1 in IPv6, così convalidando la IP all'interno dell'applicazione sarebbe sicuro, se si intende

if(IPAddress::In(array("127.0.0.1","::1"))) 
{ 
    //Show Application 
} 

dubito molto che si dovrà un gruppo di hacker d'élite dopo la tua porta 80 ma come nota a margine ci sono stati alcuni discorsi sui difetti nel fare affidamento su un indirizzo IP in quanto i pacchetti TCP possono essere modificati.

Ma non dovrebbe essere una preoccupazione per voi.

0

È anche possibile controllare l'hostname localhost ma se l'indirizzo del server è 127.0.0.1, dovrebbe risolversi. Questa è una pratica standard su ipv4. Su ipv6 puoi controllare :: 1 come suggerisce Robert Pitt.

+0

127.0.0.1 si risolve sempre nel computer locale corrente – RobertPitt

+0

@RobertPitt che potrebbe essere vero, ma non è l'unico indirizzo che risolve il computer locale. ci sono circa 16777216 in più nel 127/8 netblock. –

6

Non sono sicuro che le risposte finora siano chiare, ma potrebbe essere io che sono confuso. Rispondo in particolare alla parte della tua domanda che dice "non accessibile su Internet". Ecco il mio tentativo di risposta:

Il server Web, non PHP, è in ascolto su un socket e accetta connessioni. PHP può ottenere informazioni sulla connessione da $ _SERVER (http://www.php.net/manual/en/reserved.variables.server.php). Tieni presente che tutto quello che stai verificando è da dove proviene la connessione: non puoi sapere nulla se il tuo server è disponibile tramite altri indirizzi IP da $ _SERVER. Ad esempio, posso accedere al mio un'istanza locale di Apache/PHP tramite qualsiasi:

Quindi, se il tuo piano è che il l'app deve comportarsi in modo diverso quando si visualizza il valore "corretto" in $ _SERVER ["SERVER_ADDR"], probabilmente si è abbastanza sicuri, ovvero è improbabile che possa essere falsificato da un utente da un client remoto.

Detto questo, non utilizzerei nessuna di queste tecniche per l'autenticazione degli utenti o l'autorizzazione di privilegi/azioni utente su un'applicazione distribuita disponibile su Internet. L'unica eccezione potrebbe essere se hai un'intera app che deve essere disponibile solo quando accedi da localhost - quindi questa tecnica probabilmente ha senso e sarà abbastanza sicura per un'app personale.

+0

Non sono preoccupato di proteggere nulla: lo script (plugin WordPress) invia l'URL di un file a un'API basata sul Web; Sto cercando di assicurarmi che le persone non stiano provando questo dai loro computer locali non accessibili alla rete. –

Problemi correlati