
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 $host
eventualmente.
Si su server
bloque es un default_server
bloque, significa que el bloque del servidor procesará cualquier solicitud enviada a cualquier host virtual. En ese caso, el valor del Host
encabezado se propaga al servidor ascendente.
Para evitar eso en el default_server
escenario, use esta versión:
proxy_set_header Host example.com;
¿Dónde example.com
está su nombre de dominio?
Aún mejor es configurar nginx correctamente para que default_server
el bloque siempre devuelva 404, por ejemplo, y se utilice un host virtual adecuado con el nombre correcto.