Los servidores proxy funcionan bajo la premisa de que existen para reenviar solicitudes de un sistema a otro. Generalmente agregan algún valor (de lo contrario no estarían en el medio), como equilibrio de carga (escala), prevención de fuga de datos (seguridad) o compresión (rendimiento).
El problema es que la solicitud enviada por el cliente se transmite, sin modificaciones, a su destino final.
Aquí es donde las cosas pueden ponerse difíciles. Hoy en día, vemos que más de la mitad de todas las aplicaciones entregadas a través de un proxy utilizan X-Forwarded-For. El 56% de las aplicaciones reales y en vivo lo utilizan, lo que lo convierte en un dato bastante significativo. X-Forwarded-For es el encabezado HTTP personalizado que lleva la dirección IP original de un cliente para que la aplicación en el otro extremo sepa cuál es. De lo contrario, solo vería la dirección IP del proxy, y eso enoja a algunas aplicaciones.
Esto se debe a que una buena cantidad de aplicações dependen de conocer la dirección IP real de un cliente para ayudar a prevenir fraudes y permitir el acceso. Si has iniciado sesión en tu banco, Gmail o tu cuenta de Xbox últimamente (oye, es donde vive Minecraft , ¿de acuerdo?) desde un dispositivo diferente al que usas habitualmente, es posible que hayas recibido una advertencia de seguridad. Porque también se rastrea la información sobre desde dónde inicias sesión, en parte para detectar intentos de fraude y uso indebido.
Su dirección IP real también se utiliza para permitir o denegar el acceso en algunos sistemas y como un medio para deducir su ubicación física. Es por eso que esas advertencias por correo electrónico suelen incluir "¿Fuiste tú quien inició sesión desde Bulgaria?"
Algunos sistemas también utilizan X-Forwarded-For para imponer el control de acceso. WordPress, por ejemplo, utiliza el archivo .htaccess para permitir el acceso según las direcciones IP. No, no es la mejor solución, pero es una común y al menos hay que reconocerles el esfuerzo de intentar ofrecer algún tipo de protección a las aplicaciones contra el uso indebido.
Independientemente de si es una buena idea o no, si va a utilizar X-Forwarded-For como parte de su esquema de autenticación o autorización, probablemente debería hacer su mejor esfuerzo para asegurarse de que realmente sea la dirección IP real del cliente. Es uno de los factores más utilizados en la ecuación de seguridad general; uno que protege tanto al consumidor como a los intereses corporativos.
Pero si acepta ciegamente todo lo que el cliente le envía en ese encabezado, podría estar permitiendo que alguien falsifique el valor y así eluda los mecanismos de seguridad diseñados para evitar el acceso ilegítimo. Después de todo, puedo falsificar prácticamente cualquier cosa que quiera con solo escribir unas cuantas líneas de código o usar uno de los muchos complementos de Chrome que me permiten manipular encabezados HTTP con facilidad.
Una de las formas de garantizar que obtienes la dirección IP real es no confiar en la entrada del usuario. Sí, ahí está de nuevo esa Regla de Seguridad Cero . Nunca confíes en la entrada del usuario. Y sabemos que los encabezados HTTP son entrada del usuario , ya sea que lo parezcan o no.
Si ya tienes un proxy, genial. Si no, deberías conseguir uno. Porque así es como se extrae y se coloca el valor correcto en X-Forwarded-For y se detiene a los falsificadores.
Básicamente, desea que su proxy pueda acceder a una solicitud y encontrar la dirección IP real que está oculta en su paquete IP. Algunos servidores proxy pueden hacerlo mediante configuración o políticas, otros requieren algo de magia programática. Independientemente de cómo lo obtengas, ese es el valor que colocas en el encabezado HTTP X-Forwarded-For y procedes normalmente. De esta manera se garantiza que las aplicaciones o los servicios posteriores tengan información precisa para tomar decisiones, incluidas las relacionadas con el acceso y la autorización.
Para la mayoría de las arquitecturas y situaciones, esto mitigará la posibilidad de que se utilice un X-Forwarded-For falsificado para obtener acceso no autorizado. Como siempre, cuanta más información tenga para formarse una idea precisa del cliente y su legitimidad, mejor será su seguridad. La combinación de la dirección IP (en X-Forwarded-For) con el tipo de dispositivo, los agentes de usuario y otros datos que se transportan automáticamente en los protocolos HTTP y de red proporciona un contexto más sólido en el que tomar una decisión informada.
¡Mantenerse seguro!
Recursos para el manejo de X-Forwarded-For: