
Приложения Django полагаются на заголовок хоста для определенных ссылок и т. д. В моей настройке есть приложение Django, работающее за nginx в качестве обратного прокси-сервера (с нестандартным server_name
)
В соответствии с:
https://docs.djangoproject.com/en/3.1/topics/security/#проверка-заголовка-хоста
Например, даже если Apache настроен таким образом, что ваш сайт Django обслуживается с нестандартного виртуального хоста с установленным ServerName, HTTP-запрос все равно может соответствовать этому виртуальному хосту и предоставить поддельный заголовок Host.
Я не смог найти никакой информации о том, можно ли это сделать в nginx и как это сделать.
Действительно ли небезопасно слепо разрешать в веб-приложении полагаться на заголовок, поступающий от nginx?
решение1
Чтобы передать заголовок обратному прокси-приложению, добавьте в свой / block Host:
следующее :server
location
proxy_set_header Host $host;
Возможные значения $host
в конечном итоге зависят от конфигурации виртуального хоста nginx.
Если ваш server
блок является default_server
блоком, это означает, что серверный блок будет обрабатывать любые запросы, отправленные на любой виртуальный хост. В этом случае значение Host
заголовка распространяется на сервер верхнего уровня.
Чтобы предотвратить это в default_server
сценарии, используйте эту версию:
proxy_set_header Host example.com;
где example.com
находится ваше доменное имя.
Еще лучше правильно настроить nginx, чтобы этот default_server
блок всегда возвращал, например, 404, и использовался правильный виртуальный хост с правильным именем.