Nginx: encabezado de host falso

Nginx: encabezado de host falso

Las aplicaciones Django dependen del encabezado del host para ciertos enlaces, etc. En mi configuración tengo una aplicación Django ejecutándose detrás de nginx como proxy inverso (con un valor no predeterminado server_name)

De acuerdo a:

https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation

Por ejemplo, incluso si Apache está configurado de manera que su sitio Django sea servido desde un host virtual no predeterminado con el nombre del servidor configurado, aún es posible que una solicitud HTTP coincida con este host virtual y proporcione un encabezado de host falso.

No pude encontrar ninguna información sobre si se puede hacer en nginx o cómo.

¿Es realmente inseguro permitir ciegamente la aplicación web basándose en el encabezado proveniente de nginx?

Respuesta1

Para pasar el Host:encabezado a la aplicación de proxy inverso, agregue lo siguiente a su bloque server/ :location

proxy_set_header Host $host;

Depende de la configuración del host virtual nginx cuáles son los valores posibles para $hosteventualmente.

Si su serverbloque es un default_serverbloque, significa que el bloque del servidor procesará cualquier solicitud enviada a cualquier host virtual. En ese caso, el valor del Hostencabezado se propaga al servidor ascendente.

Para evitar eso en el default_serverescenario, use esta versión:

proxy_set_header Host example.com;

¿Dónde example.comestá su nombre de dominio?

Aún mejor es configurar nginx correctamente para que default_serverel bloque siempre devuelva 404, por ejemplo, y se utilice un host virtual adecuado con el nombre correcto.

información relacionada