
Os aplicativos Django dependem do cabeçalho do host para determinados links, etc. Na minha configuração, tenho um aplicativo Django rodando atrás do nginx como proxy reverso (com um não padrão server_name
)
De acordo com:
https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation
Por exemplo, mesmo que o Apache esteja configurado de forma que seu site Django seja servido a partir de um host virtual não padrão com o ServerName definido, ainda é possível que uma solicitação HTTP corresponda a esse host virtual e forneça um cabeçalho Host falso
Não consegui encontrar nenhuma informação sobre se ou como isso pode ser feito no nginx.
É realmente inseguro permitir cegamente no webapp dependendo do cabeçalho vindo do nginx?
Responder1
Para passar o Host:
cabeçalho para o aplicativo com proxy reverso, adicione o seguinte ao seu bloco server
/ :location
proxy_set_header Host $host;
Depende da configuração do host virtual nginx quais são os valores possíveis para $host
eventualmente.
Se o seu server
bloco for um default_server
bloco, significa que o bloco do servidor processará quaisquer solicitações enviadas a qualquer host virtual. Nesse caso, o valor do Host
cabeçalho se propaga para o servidor upstream.
Para evitar isso no default_server
cenário, use esta versão:
proxy_set_header Host example.com;
onde example.com
está o seu nome de domínio.
Melhor ainda é configurar o nginx corretamente para que default_server
o bloco sempre retorne 404, por exemplo, e um host virtual adequado com o nome correto seja usado.