OK, ho un piccolo problema di autenticazione. Il mio servizio Web consente di connettersi alla mia API su HTTP con un nome utente e una password, ma questa connessione può anche essere limitata a uno specifico indirizzo IP.Come utilizzare correttamente HTTP_X_FORWARDED_FOR?
Ciò significa che il $_SERVER['REMOTE_ADDR']
può non essere corretto. So già che qualsiasi informazione IP non può mai essere veramente invocata - ho la restrizione solo nel tentativo di aggiungere un altro livello di sicurezza.
Se questo è il quadro generale di una richiesta al mio server web:
clientSERVER => clientPROXY => myPROXY => mySERVER
allora questo significa che mioserver mostra REMOTE_ADDR
di myproxy invece di quella del client e invia l'attuale IP del client come HTTP_X_FORWARDED_FOR
.
Per ovviare a questo, il mio servizio web ha una lista di indirizzi IP 'di proxy supporta' e se REMOTE_ADDR
da uno di quegli indirizzi IP di fiducia, allora dice il mio servizio web che l'indirizzo IP effettivo è il valore di HTTP_X_FORWARDED_FOR
.
Ora il problema è con clientPROXY. Ciò significa che (molto spesso) mySERVER assume il valore HTTP_X_FORWARDED_FOR
che ha più indirizzi IP. In base alla documentazione HTTP_X_FORWARDED_FOR
, il valore è un elenco separato da virgole di indirizzi IP in cui il primo IP è quello del vero client effettivo e ogni altro indirizzo IP è quello di un proxy.
Quindi, se HTTP_X_FORWARDED_FOR
ha più valori e il mio servizio è IP limitato, devo controllare l'ultimo valore di HTTP_X_FORWARDED_FOR
contro il mio elenco IP consentito e semplicemente ignorare l'IP del client attuale?
Suppongo che in un sistema, in cui devo impostare l'elenco di indirizzi IP consentiti, l'indirizzo IP autorizzato dovrebbe essere quello di un proxy e non un IP che si trova dietro il proxy (dal momento che potrebbe essere un IP localhost e cambiare frequentemente).
E che dire di HTTP_CLIENT_IP
?
http : //stackoverflow.com/q/7445592/759866 – Benjamin