2012-02-17 10 views
5

Desidero configurare una macchina nella mia rete per accettare tutte le chiamate da una macchina specifica senza autenticazione. Per questo ho intenzione di utilizzare l'indirizzo IP del computer client come fattore di fiducia richiesto per consentire l'autenticazione non controllata.È possibile determinare con precisione l'indirizzo IP di un client in servlet java

La mia preoccupazione è che è possibile determinare con precisione l'indirizzo IP di un client in un servlet Java? È possibile che l'IP che ottengo nel servlet possa essere modificato da qualche meccanismo di hacking per far credere al mio server che si tratta dell'IP di fiducia?

Ad esempio se la mia macchina server è configurata per fare affidamento su 192.168.0.1, allora è possibile da parte di qualche altro client diverso da 192.168.0.1 fingere come 192.168.0.1 e ingannare il mio meccanismo di autenticazione?

risposta

14

È possibile utilizzare il metodo getRemoteAddr() dalla classe HttpServletRequest per ottenere l'indirizzo IP. Stai attento, però. Se il tuo client è dietro un server proxy (o anche un firewall NAT), otterrai invece l'indirizzo IP del proxy.

Quindi, è anche possibile cercare l'intestazione HTTP X-Forwarded-For (standard per l'identificazione dell'indirizzo IP di origine di un client dietro un proxy HTTP). Vedi di più su Wikipedia. Stai attento, però. Se il tuo cliente NON è dietro un proxy, puoi ottenere un'intestazione XFF nullo. Quindi, se si deve seguire questo percorso, è necessario utilizzare un mix dei metodi servlet e la valutazione dell'intestazione XFF. Non vi è alcuna garanzia, tuttavia, che il proxy ti inoltrerà l'intestazione.

Tuttavia, tenere presente che l'indirizzo IP di origine può essere facilmente modificato o contraffatto da qualsiasi client dannoso. Consiglio vivamente di utilizzare una sorta di autenticazione client (un certificato, ad esempio). Non esiste alcun modo per un'app Web per con precisione determinare l'indirizzo IP del client.

+0

e +1 per menzionare l'intestazione XFF e la possibilità che sia nullo – stevevls

+0

come funziona l'autenticazione client? il cliente può inviare un certificato simile a quello che il server invia nella comunicazione https per identificarsi, potresti fornire alcuni dettagli al riguardo. – Ashish

+1

È possibile generare un certificato client autofirmato e installarlo sul keystore della macchina client (si sta utilizzando anche Java nel client?). Quindi, il tuo server dovrebbe accettare solo le richieste firmate dai certificati client da una determinata CA (te stesso, in questo caso). C'è abbondanza di documentazione sui certificati client Java + sul web. Inoltre, dai un'occhiata all'eccellente [voce di Wikipedia] (http://en.wikipedia.org/wiki/Transport_Layer_Security) su TLS per le basi. – Viccari

0

Gli IP possono essere falsificati facilmente come mittenti di posta elettronica. Suggerirei di non fare affidamento esclusivamente su di essi.

+0

Non facile come il mittente della posta, come si risponde a un indirizzo IP specificato. Quindi il vero problema è l'IP sorgente tzrusting in caso di azioni, ma su di esse puoi raggirarti quando fornisci le informazioni – Hurda

+1

Sì, ho risposto a stevelvs perché ha fatto la distinzione tra le scritture e readonly. Btw. il mittente della posta è esattamente lo stesso perché in entrambi i casi non è possibile ricevere la risposta. – wintersolutions

7

Il vostro servizio potrebbe essere vulnerabile a IP Spoofing. È facile creare pacchetti che sembrano provenire da un indirizzo IP diverso. Il problema dello spoofing, tuttavia, è che l'utente malintenzionato non sarà in grado di ricevere alcun pacchetto di risposta. Pertanto, se chiamare i tuoi servizi non causa un cambiamento di stato interno (ad esempio, è leggi solo), allora dovresti essere a posto. Se, tuttavia, le chiamate al servizio emetteranno scrive, non si dovrebbe fare affidamento semplicemente sull'indirizzo IP perché un pacchetto contraffatto sarà sufficiente per modificare lo stato interno del sistema.

+0

+1 per portare gli effetti di lettura e scrittura. – Viccari

+0

potresti fornire un modo per ottenere la funzionalità desiderata, ad esempio affidandomi a una macchina nella mia rete. – Ashish

+0

parte di ciò che si vorrebbe fare è decidere il livello accettabile di rischio in equilibrio con quanti cicli si devono bloccare. se sei una banca, devi assicurarti che sia solida, ma altre applicazioni hanno più tolleranza. un'opzione è garantire che non si sia vincolati a un IP pubblico e si abbia fiducia negli amministratori di sistema per mantenere la rete locale bloccata. se è davvero necessario proteggerlo, i suggerimenti di Viccaris sull'utilizzo dei certificati client sono buoni se è necessario bloccarlo. qualunque cosa tu faccia, se vai oltre la verifica IP, assicurati di poter revocare facilmente l'accesso. – stevevls

2

Potresti essere localmente disponibile a ARP Spoofing. Dove una macchina dannosa convince il router ad associare l'indirizzo IP al suo indirizzo MAC.

Il livello e il meccanismo di fiducia in realtà dipende dalla sensibilità del server/servizio che si sta cercando di proteggere e l'ambiente si sta operando.

Sembra a me che si tratta di un accordo locale, dato il privato Intervallo IP 192.168. Se questo server non è pubblico, non è critico e si sta operando in un ambiente LAN relativamente sicuro che è ben isolato dal pubblico e da altre LAN private, quindi si dovrebbe essere OK. Altrimenti dovresti guardare ad altre opzioni di sicurezza ad un livello più alto.

+0

bel punto. Non ho (ancora) trascorso molto tempo a preoccuparmi degli utenti malintenzionati sulla rete locale, anche se è sicuramente noto che succederà e una buona idea da proteggere contro. :) – stevevls

+0

L'intervallo IP 192.168 non verrà trasportato da nessun router pubblico. Quindi qualsiasi minaccia dovrà venire internamente –

1

La mia preoccupazione è che è possibile determinare con precisione l'indirizzo IP di un client in un servlet Java?

No, non è possibile. Esistono diversi scenari in cui non è possibile visualizzare l'indirizzo IP del client reale a causa delle azioni dell'utente o di altri motivi al di fuori del controllo dell'utente.

In questi ultimi casi, l'identificazione basata su IP finisce per causare mal di testa per i vostri clienti onesti; cioè i clienti che vuoi davvero mantenere.

Se è davvero necessario limitare l'accesso a un set specifico di computer, è consigliabile utilizzare qualcosa come SSL/TLS con certificati client come prima linea di difesa. TLS con i certificati client è descritto here.

Problemi correlati