Muy bien, tengo un pequeño problema de autenticación. Mi servicio web me permite conectarme a mi API a través de HTTP con un nombre de usuario y contraseña, pero esta conexión también puede restringirse a una dirección IP específica.¿Cómo se usa HTTP_X_FORWARDED_FOR correctamente?
Esto significa que el $_SERVER['REMOTE_ADDR']
puede ser incorrecto. Ya sé que cualquier información de IP nunca puede confiarse realmente. Tengo la restricción solo en un intento de agregar otra capa de seguridad.
Si este es el panorama general de una solicitud a mi servidor web:
clientSERVER => clientPROXY => myPROXY => mySERVER
entonces esto significa que Myserver muestra REMOTE_ADDR
de myproxy en lugar de la del cliente y envía el actual IP del cliente como HTTP_X_FORWARDED_FOR
.
Para superar esto, mi servicio web tiene una lista de direcciones IP 'de confianza de proxy' y si REMOTE_ADDR
es de una de esas direcciones IP de confianza, entonces se dice que mi servicio web que la dirección IP real es el valor de HTTP_X_FORWARDED_FOR
.
Ahora el problema es con clientPROXY. Esto significa que (muy a menudo) mySERVER obtiene HTTP_X_FORWARDED_FOR
valor que tiene múltiples direcciones IP. De acuerdo con la documentación HTTP_X_FORWARDED_FOR
, el valor es una lista de direcciones IP separadas por comas, donde la primera IP es la del verdadero cliente real y cualquier otra dirección IP es la de un proxy.
lo tanto, si HTTP_X_FORWARDED_FOR
tiene múltiples valores y mi servicio está restringido IP, tengo que comprobar el 'último' valor de HTTP_X_FORWARDED_FOR
contra mi lista de direcciones IP permitidas y simplemente ignorar la IP del cliente real?
Supongo que en un sistema, donde tengo que configurar la lista de direcciones IP permitidas, la dirección IP incluida debe ser la de un proxy y no una IP que está detrás del proxy (ya que podría ser una IP localhost) y cambiar frecuentemente).
¿Y qué de HTTP_CLIENT_IP
?
http : //stackoverflow.com/q/7445592/759866 – Benjamin