È sicuro fidarsi di $ _SERVER ['REMOTE_ADDR']?


89

È sicuro fidarsi $_SERVER['REMOTE_ADDR']? Può essere sostituito cambiando l'intestazione della richiesta o qualcosa del genere?

È sicuro scrivere qualcosa del genere?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}

3
Aggiungendo alle risposte esistenti, sarà sempre l'indirizzo IP che ha effettuato la richiesta al tuo server, ma ciò non significa che sia l'indirizzo IP del computer che ha avviato la richiesta. Un numero qualsiasi di server proxy potrebbe trovarsi tra te e l'utente finale e il più vicino a te è l'indirizzo IP che ottieni.
Dan Grossman

sì, è sicuro perché non può essere sottotitolato da altri trucchi o imbrogli. ma assicurati di aggiungere più controllo per la variabile $ grant_all_admin_rights.
Yuda Prawira

Qualsiasi variabile $ _SERVER può essere falsificata - es. Curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Quindi dipende interamente dal contesto: se l'aggressore si aspetta una risposta, tornerà a $ ip. Se non si preoccupano della risposta, possono sicuramente falsificare l'intestazione. Se il codice dopo il controllo dell'intestazione diceva invece: "open_the_door_to_badguys ();" avresti un problema.
TMG

3
@TMG Non è possibile falsificare la $_SERVER['REMOTE_ADDR']variabile impostando un'intestazione della richiesta HTTP. PHP aggiunge automaticamente il prefisso a tutte le intestazioni delle richieste HTTP HTTP_durante la creazione delle chiavi nel $_SERVERsuperglobal.
MrWhite

Risposte:


110

Sì, è sicuro. È l'IP di origine della connessione TCP e non può essere sostituito modificando un'intestazione HTTP.

Un caso di cui potresti preoccuparti è se sei dietro un proxy inverso, nel qual caso REMOTE_ADDR sarà sempre l'IP del server proxy e l'IP dell'utente verrà fornito in un'intestazione HTTP (come X-Forwarded-For ). Ma per il normale caso d'uso la lettura di REMOTE_ADDR va bene.


4
E lo spoofing dell'indirizzo IP?
Abdull

1
@Abdull Le persone che possono farlo sono di solito le stesse persone che hanno accesso fisico al tuo box. quindi non preoccuparti più di tanto.
Behrooz

5
Lo spoofing IP di @Abdull può inviare messaggi solo in un modo, non puoi falsificare il tuo IP e ricevere un messaggio in cambio.

1
I router Internet non controllano l'IP di origine e di destinazione per instradare i pacchetti? Dubito che un pacchetto contraffatto raggiungerà mai la destinazione attraverso i nodi Internet.
Viktor Joras

57

$_SERVER['REMOTE_ADDR']è l'indirizzo IP su cui è arrivata la connessione TCP. Sebbene sia tecnicamente possibile falsificare in modo bidirezionale gli indirizzi IP su Internet (annunciando percorsi errati tramite BGP), è probabile che tali attacchi vengano individuati e non disponibili per l'attaccante tipico: in pratica, l'attaccante deve avere il controllo su un ISP o un operatore. Non ci sono (ancora) attacchi di spoofing unidirezionali fattibili contro TCP. Tuttavia, lo spoofing IP bidirezionale è banale su una LAN.

Tieni inoltre presente che potrebbe non essere un indirizzo IPv4, ma un indirizzo IPv6. Il tuo controllo attuale va bene a questo proposito, ma se controlli che 1.2.3.4si verifica solo ovunque all'interno $_SERVER['REMOTE_ADDR'], un attaccante potrebbe semplicemente connettersi da 2001:1234:5678::1.2.3.4.

Riassumendo, per qualsiasi cosa diversa dalle applicazioni critiche (banche / militari / danni potenziali> 50.000 €), puoi utilizzare l'indirizzo IP remoto se puoi escludere gli aggressori nella tua rete locale.


4
Sembri molto informato sul protocollo Internet.
Brian Peterson

@phihag, Il fatto che $_SERVER['REMOTE_ADDR']sia l'indirizzo IP da cui proviene la connessione TCP dipende interamente dal tuo SAPI.
Pacerier

è tutt'altro che impossibile per un utente malintenzionato su una WLAN WEP / WPA dare il via al client reale e falsificare quell'indirizzo IP: sia WEP che WPA hanno punti deboli che rendono you have been kicked off the wlanfacile creare pacchetti di spoofing con gli strumenti giusti. google WPA downgrade test, ad esempio
hanshenrik

L'indirizzo IP è a livello IP non a livello TCP.
Viktor Joras

3

Come accennato in precedenza, non è assolutamente sicuro. Ma non significa che non dovresti usarlo. Considera l'idea di combinarlo con altri metodi di autenticazione, ad esempio il controllo dei valori COOKIE.


6
Dopo aver falsificato un indirizzo IP, modificare la richiesta http e inviare cookie falsi è un gioco da ragazzi ..... (o un pezzo di cookie)
Uri Goren

1
Per favore, spiega cosa intendi per "non assolutamente sicuro"
Jake
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.