Come bloccare gli indirizzi IP usando la mia app web

0

Sto sviluppando un'applicazione web che voglio bloccare gli indirizzi IP non registrati nel mio database. Questa web-app non dovrebbe essere accessibile a tutti gli utenti, ma gli utenti (diciamo) mi registrano manualmente.

Il caso d'uso è simile a questo:

  • Creo nome utente e password per il mio cliente.
  • Eseguono il login (primo accesso per il client)
  • Ottengo l'indirizzo IP o MAC della macchina del cliente (in qualche modo)
  • Conservo questo indirizzo univoco per il cliente
  • Quindi tutti i successivi tentativi di accesso dovrebbero provenire dall'indirizzo che memorizzo, altrimenti blocco il tentativo.

Pertanto, non è possibile effettuare il login per altri ragazzi che conoscono nome utente e password (ad eccezione del mio cliente, ovviamente). Devono anche accedere a quella macchina.

Pensi che abbia senso? Hai altri suggerimenti?

Esempio di caso d'uso:

Diciamo, sono un grossista e ho clienti al dettaglio. Registro uno dei miei nuovi clienti al dettaglio con username e password e do loro le credenziali che ho creato. Possono facilmente accedere, uscire ...

Supponiamo che il nuovo cliente (di cui non mi fido veramente) si occupi anche del mio concorrente. Se dà le credenziali al mio concorrente, può vedere tutto, lo stato delle scorte, i prezzi, gli sconti del prodotto e così via ... Perché ci sono (potrebbe essere) alcuni clienti di cui non mi fido tanto, devo proteggere i sistemi dal mio concorrente.

    
posta Adem İlhan 24.07.2017 - 19:52
fonte

2 risposte

7

I controlli di accesso basati su IP non sono generalmente sensibili perché non esiste una relazione 1: 1 tra gli indirizzi IP e gli utenti. Più utenti possono condividere lo stesso indirizzo IP se sono dietro Network Address Translation (NAT) e la maggior parte degli utenti / dispositivi non ha un indirizzo IP statico. Per la maggior parte delle connessioni Internet, l'indirizzo IP viene assegnato dinamicamente e l'assegnazione può cambiare raramente. Inoltre, i dispositivi mobili (laptop, telefoni) possono spostarsi frequentemente da una rete all'altra. Per esempio. un cliente può utilizzare il servizio da un ufficio in un giorno, ma può lavorare da casa in un altro giorno.

L'unico scenario in cui i controlli di accesso basati su IP hanno senso se tutti i client hanno un indirizzo IP statico per il loro ufficio. Questo fa parte di molti, ma non tutti i pacchetti Internet orientati al business. Se il cliente desidera lavorare da un altro posto, dovrà configurare una VPN in modo che possa essere remoto nella rete dell'ufficio, quindi accedere alla tua app da lì.

I controlli di accesso basati su IP possono essere implementati in diversi modi:

  • all'interno dell'applicazione Web, dove si controllano i metadati della richiesta. Questo è il modo più flessibile e consente di associare gli IP agli account. Essere consapevoli del fatto che si desidera l'IP della richiesta originale. Se la tua app si trova dietro una cache o un proxy, dovrebbero inserire l'IP originale come intestazione (di solito X-Forwarded-For).

  • con un server gateway davanti all'app Web, ad es. se si esegue l'app dietro Apache come proxy inverso. Dovrai aggiornare la configurazione del server per ogni nuovo client.

  • con le regole del firewall, con cui è possibile inserire nella whitelist tipi di traffico specifici (ad esempio, consentire il traffico TCP alla porta 80 dall'IP del cliente, altrimenti rilasciare). Tuttavia, dovrai aggiornare la configurazione del firewall per ogni nuovo cliente poiché non puoi consentire l'accesso solo alla tua pagina di accesso e non al resto del sito.

  • richiedendo al client di configurare un bridge VPN / di rete dal router al router. Dal momento che tutti i client si connettono alla VPN vengono visualizzati all'interno della rete, quindi il firewall può semplicemente bloccare qualsiasi traffico in entrata che non sia il traffico VPN. Se configurato correttamente, questo è un meccanismo molto flessibile e molto sicuro, ma richiede l'installazione di apparecchiature di router di livello enterprise e amministratori esperti.

Quindi chiaramente nessuno di questi eccetto la prima soluzione (verifica i metadati della richiesta all'interno della tua app) è probabilmente poco pratico.

Sebbene i controlli di accesso basati su IP possano contribuire a una buona sicurezza in alcune circostanze, tendono a essere poco flessibili e scomodi. Infastidiranno anche i potenziali clienti che non hanno un indirizzo IP statico. Molto probabilmente altri meccanismi per rafforzare il tuo login potrebbero essere più flessibili e aggiungere più sicurezza, come incoraggiare gli utenti a scegliere password sicure, tentativi di accesso limitativi della velocità (per i quali i limiti di velocità degli indirizzi IP possono essere ragionevoli), autenticazione senza password tramite Provider di identità OpenID o autenticazione a più fattori.

    
risposta data 24.07.2017 - 20:30
fonte
1

Qualsiasi framework / linguaggio web, sarebbe Flask per Python, Ruby on Rails, ASP.NET MVC o PHP, offre un modo per ottenere l'indirizzo IP del client.

Ad esempio, in PHP, l'indirizzo IP può essere recuperato usando:

$_SERVER['REMOTE_ADDR']

Una volta ottenuto questo indirizzo, lo si confronta con quello che è memorizzato nel database per un dato utente.

Si noti che questo funzionerà solo negli ambienti aziendali se e solo se l'indirizzo IP viene assegnato per sempre a una macchina e solo se gli utenti non cambiano le macchine. In qualsiasi altro ambiente, non sarai in grado di associare un indirizzo IP a un particolare utente, poiché gli indirizzi IP verrebbero assegnati dinamicamente e occasionalmente cambiano.

    
risposta data 24.07.2017 - 20:13
fonte

Leggi altre domande sui tag