Mini Tip: X Forwarded For en HTTP

Es un pequeño detalle pero sucede muy a menudo cuando estás detrás de un servidor proxy en tu web server: no tenés idea qué IP tiene el cliente.

La razón de esto es que el proxy toma esa posición que resulta ser tu propio servidor, así que todos los clientes terminan entrando con el supuesto mismo IP o así lo asume el Apache.

En PHP la variable de servidor que toma mal este valor es REMOTE_ADDR y el problema es que si tenés algún filtro o método que requiere saber específicamente a qué cliente le estás afectando no podrías hacerlo.

Peero, existe una solución, una variable que se incluyó primero en Squid es HTTP_X_FORWARDED_FOR para que uno tenga forma de saber cual fue el origen verdadero. Si esta variable tiene valores significa que estamos detrás de un proxy, por ejemplo NGINX, y para conocer la IP real vamos a tener que reemplazar con estas pocas líneas de código:

if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
	$http_x_headers = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );

	$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
}

Y listo, ahora REMOTE_ADDR tiene el valor correcto.

Otros posts que podrían llegar a gustarte...

Comentarios

  • DMV    

    Que bueno volver a ver notas tecnicas!
    Gracias!

    • Responder
    • Citar
    • Comentado:
    • a veces me abstengo de ponerlas pero me dije el otro día ¿Qué importa? Es mi blog! así que cada tanto seguiré poniendo estas, próximamente saldrá otras de otras cosas que estuve armando por hobby

      • Responder
      • Citar
      • Comentado:

Deje su comentario:

Tranquilo, su email nunca será revelado.
La gente de bien tiene URL, no se olvide del http/https
Para evitar bots, si se tardó mucho en leer la nota seguramente no sirva y tenga que intentar dos veces

Negrita Cursiva Imagen Enlace


comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador