Controllo IP di PHP come sicurezza?

4

Vorrei solo qualche input su uno script PHP che sto scrivendo. È solo una semplice sceneggiatura a cui solo io dovrei essere in grado di accedere. Non ho un indirizzo IP dinamico, quindi non è un problema per me, ma mi chiedo se ci sono potenziali problemi nella mia misura di "sicurezza".

Attualmente il mio script è configurato in questo modo:

$uip = $_SERVER['REMOTE_ADDR'];
if ($uip == "my personal ip here")
 {
   echo "access granted";
 }

else
 {
   echo "access denied";
 }

Questo è "sicuro"? O è facile per qualcuno che conosce il mio IP essere in grado di spoofare la loro visita allo script PHP usando il mio IP e ingannare lo script pensando che sia il mio IP?

Qualche suggerimento? Non voglio complicare eccessivamente le cose (ad esempio una pagina di accesso) e voglio solo sapere se la mia soluzione KISS è vitale o potenzialmente problematica.

    
posta user46995 21.05.2014 - 10:19
fonte

3 risposte

6

Il più grande rischio con questa configurazione è Falsificazione richiesta cross-site (CSRF). Ad esempio, l'imaging di un sito ha un URL come link che imposta il titolo del sito. Vuoi solo che l'amministratore acceda a questo, non a nessun altro, e usi i controlli degli indirizzi IP per far rispettare questo. Ora immagina solo se l'amministratore sta navigando in qualche sito non correlato e questo include un tag immagine che si collega a questo URL, ad es. link Quello che accadrà è che il browser admin tenterà di caricare quel link. Il server Web vedrà la richiesta proveniente dall'indirizzo IP autorizzato e consentirà la modifica del titolo. Non bene! La solita correzione per CSRF consiste nell'emettere un token casuale agli utenti, che devono essere inclusi nella richiesta.

Chi altri usa il tuo indirizzo IP? La maggior parte delle configurazioni domestiche ha un numero di persone che accedono a Internet attraverso lo stesso router e quindi lo stesso indirizzo IP. Potresti non volere che queste altre persone abbiano accesso.

Il rischio di spoofing dell'indirizzo IP è meno di un problema. TCP ha una protezione ragionevole contro questo, che blocca molti attacchi. È ancora possibile in determinate circostanze, ma se stai cercando qualcosa di semplice, non mi preoccuperei troppo.

    
risposta data 21.05.2014 - 10:52
fonte
1

Purtroppo, non penso che questo sia un approccio molto sicuro. Ci sono una serie di motivi per cui:

  1. NAT nella rete locale
  2. NAT sul tuo ISP (NAT di tipo carrier)
  3. Proxy ovunque tra il tuo browser e il tuo server web
  4. Carica i bilanciatori davanti al tuo server web

Ognuno di questi potrebbe portare a più dispositivi che accedono alla tua pagina per condividere lo stesso indirizzo IP.

Nel caso non ti sia familiare: Network Address Translation (NAT) consente a più sistemi su una rete di accedere al Internet dallo stesso indirizzo IP pubblico. Ciò è necessario perché ci sono molti più sistemi che accedono a Internet di quanti siano disponibili indirizzi IPv4 pubblici.

La maggior parte delle famiglie gestisce un router che esegue NAT per loro, ovvero qualsiasi sistema connesso a Internet (ad es. desktop, laptop, tablet, telefono, televisione) proviene dallo stesso indirizzo IP. Ciò significa anche che ognuno di questi sistemi può accedere alla tua pagina web e verrà autenticato.

Diventa peggio di così. Il tuo ISP potrebbe essere in esecuzione NAT carrier-grade (CGN) - il che significa che un intero gruppo di famiglie condividerà il Indirizzo IP come te Ciò significa che ognuno di essi potrebbe accedere alla tua pagina web e verrà autenticato.

Poi ci sono i proxy. Se il tuo browser invia traffico attraverso un proxy (come quello ospitato dal tuo ISP), o il tuo sito web si trova di fronte a una rete di consegna dei contenuti ( CDN) , quindi molto probabilmente otterrai l'indirizzo IP del proxy o nodo edge CDN, piuttosto che l'indirizzo IP del tuo computer.

Infine, se il tuo host web dispone di un servizio di bilanciamento del carico di fronte al tuo server web, allora potresti finire con l'indirizzo IP del servizio di bilanciamento del carico.

Per tutti questi motivi, non raccomanderei assolutamente un meccanismo di accesso che si basi esclusivamente sull'indirizzo IP dell'utente che accede alla tua pagina web.

Se non vuoi scrivere tu stesso il codice per l'autenticazione, ti consiglio di controllare alcune librerie di terze parti per farlo - assicurati però di rivedere il codice prima di implementarlo nella tua pagina web.

In merito allo spoofing IP

Altri hanno menzionato il rischio di spoofing IP, il che sembra facile in teoria, ma (anche in una forma semplificata) richiederebbe due diversi passaggi:

  1. Cambia l'indirizzo IP nell'intestazione del datagramma IP
  2. Intercetta la risposta dal server per leggere i risultati

Il primo bit non è difficile da solo. La difficoltà è che il server invierà la risposta all'IP spoofato, piuttosto che l'IP degli hacker. Per poter leggere la risposta, l'utente malintenzionato dovrebbe quindi intercettare la risposta all'utente. Questo sarebbe generalmente abbastanza difficile.

    
risposta data 22.05.2014 - 06:56
fonte
0

Hai sostanzialmente risposto alla tua domanda. No, non è sicuro se viene utilizzato come unica misura di sicurezza.

Un IP è pubblico e un IP può essere falsificato, quindi le persone possono accedere facilmente al materiale spoofando il tuo IP.

Suggerisco davvero una pagina di accesso come livello principale di sicurezza. Qui è un sito web che presenta un'esercitazione semplice ed efficace su come per creare uno script di accesso. È qualcosa di veramente buono da sapere, o almeno capire.

    
risposta data 21.05.2014 - 10:35
fonte

Leggi altre domande sui tag