No veo ningún problema enorme al activar self-XSS , ya que inyectar contenido en una conexión TCP existente ya es lo suficientemente difícil (gracias a los números de secuencia iniciales). E incluso si un atacante pudiera inyectar paquetes TCP válidos , probablemente estaría más interesado en obtener la información de su sesión directamente en su IP, sin pasar por XSS.
Las cosas cambian un poco, cuando el self-XSS es persistente. es decir, termina almacenado en el DB y puede volver a ejecutarse en una etapa posterior. En ese caso, es prácticamente un XSS completo , ya que puede, por ejemplo, dar acceso a su cuenta a otros usuarios que ejecutarán el XSS. Pero no sanear los datos proporcionados por un usuario que entra en la base de datos debería ser un delito.
Aún así, sobre las preguntas:
Si bien la verdadera solución sería desinfectar automáticamente la dirección IP antes de mostrarla, me gustaría saber cuándo deberíamos hacerlo realmente.
No solo la IP, sino toda la información proporcionada por una solicitud del usuario. Y no solo en casos específicos sino siempre. Si no desinfecta cada pieza de información y la envía, o la deja en la base de datos y la envía más tarde, tendrá problemas de XSS.
¿Hay alguna configuración en la que los servidores web cambien automáticamente el REMOTE_ADDR
al valor de uno de estos encabezados?
Los servidores web no hacen eso (aunque un poco de pirateo de nginx me permitió realizarlo, pero eso sería una práctica horrible). Los servidores web pasan las variables al programa / script CGI. Las cosas de apache mod_cgi
pasan a través de variables de entorno y STDIN (para contenido POST). Nginx controla las variables que están presentes en su configuración para ir al CGI a través del archivo scgi_params
(normalmente en /etc/nginx/scgi_params
).
¿De qué manera son útiles esos encabezados?
Ver mi comentario rant sobre akamai y True-Client-IP
, es decir, X-Forwarded-For
es el encabezado HTTP correcto. X-Forwarded-For
está destinado a conexiones que pasan por algún tipo de proxy (en lugar de pasar por un NAT).
Lo único que estoy viendo es cuando el cliente pasa por algún proxy por una razón poco obvia pero aún quiere que el sitio web conozca su dirección IP. ¿Hay alguna otra?
Y sí, ese es el uso principal y (sin considerar posibles hacks sucios) solo se utiliza para X-Forwarded-For
. Esto puede parecer poco útil pero es mucho más común de lo que imaginas.
Las oficinas / centros de datos a menudo tienen enormes servidores proxy / cortafuegos a los que sus redes internas pasan a través de Internet. Algunas de las máquinas internas tienen IP privadas y dependen de un NAT, pero otras sí tienen sus propias IP públicas y dependen del servidor de seguridad como proxy (el servidor de seguridad debe tener estado para que sea efectivo). Esta situación requiere el uso de 'X-Forwarded-For' para saber de qué parte de la red proviene una solicitud.
Los
proxies de Internet (gratuitos y no gratuitos) a menudo usan ese encabezado para asegurarse de que puede visitar sitios web que se adaptan a su ubicación. p.ej. conectando directamente a google.com
me redireccionan a google.co.uk
(ya que vivo en el Reino Unido). Pero si uso un proxy en Polonia y no configuro X-Forwarded-For
, me redireccionaré a google.com.pl
. Si utilizo el proxy y configuro X-Forwarded-For
a la IP de mi casa (en el Reino Unido), me redirecciono correctamente a google.co.uk
.