¿Es seguro usar X-Real-IP como una forma de verificar el acceso a localhost?

1

Tengo una aplicación que escucha en el puerto 5000 y se puede acceder a Internet a través de nginx con esta configuración:

upstream myapp {
    server 127.0.0.1:5000;
}
server {
    listen 80;
    location / {
        proxy_pass http://myapp;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
#...
}

Ahora, asumiendo que solo se puede acceder al puerto 5000 directamente desde el host local, asumo que todas las comunicaciones externas son manejadas por nginx, asumiendo que todas las solicitudes que recibe la aplicación que no tienen el X-Real -El encabezado de IP proviene de localhost.

¿Son estas suposiciones erróneas? ¿Podría una persona sin acceso a la máquina seguir accediendo a la aplicación web sin autenticación? ¿Me estoy perdiendo algo?

Editar: Creo que no estoy planteando una pregunta clara aquí. Probablemente una mezcla entre mi falta de conocimiento y yo pensando que estoy entendiendo algo fundamentalmente incorrecto. Entonces, creo que podrías resumir mis dudas al responder esto:

En esta situación, ¿puedo asumir que si una solicitud a mi aplicación web no tiene el encabezado "X-Real-IP" entonces proviene de localhost?

o lo contrario:

¿Puedo falsificar de alguna manera una solicitud que haga que nginx no establezca el encabezado X-Real-IP, dada la configuración anterior?

¡Salud!

    
pregunta Alfro 10.08.2017 - 16:04
fuente

1 respuesta

1

Ya está asumiendo que solo el tráfico de localhost puede llegar a su aplicación web en el puerto 5000. Por lo tanto, verificar cualquier encabezado que establezca en nginx no es el factor para decidir si esta es una solicitud de localhost. Todos son, por definición.

Si tu pregunta es más bien

  

puedo asumir que todo lo que tiene el conjunto de encabezados 'X-Real-IP' proviene de 'nginx' "

la respuesta sería "no"; puedes enrollar eso fácilmente en localhost.

Edite para reflejar la edición en la pregunta:

Con sus suposiciones, puede suponer que todas las solicitudes en el puerto 5000 provienen de localhost, independientemente de los encabezados.

A partir de ahora (es decir, que yo sepa, no hay ningún exploit que permita que eso ocurra, independientemente de la configuración), si esa configuración es all la configuración que existe, no hay forma de hacer nginx reenvía una solicitud sin establecer el encabezado.

    
respondido por el Tobi Nary 10.08.2017 - 16:26
fuente

Lea otras preguntas en las etiquetas