Nginx — поддельный заголовок хоста

Nginx — поддельный заголовок хоста

Приложения Django полагаются на заголовок хоста для определенных ссылок и т. д. В моей настройке есть приложение Django, работающее за nginx в качестве обратного прокси-сервера (с нестандартным server_name)

В соответствии с:

https://docs.djangoproject.com/en/3.1/topics/security/#проверка-заголовка-хоста

Например, даже если Apache настроен таким образом, что ваш сайт Django обслуживается с нестандартного виртуального хоста с установленным ServerName, HTTP-запрос все равно может соответствовать этому виртуальному хосту и предоставить поддельный заголовок Host.

Я не смог найти никакой информации о том, можно ли это сделать в nginx и как это сделать.

Действительно ли небезопасно слепо разрешать в веб-приложении полагаться на заголовок, поступающий от nginx?

решение1

Чтобы передать заголовок обратному прокси-приложению, добавьте в свой / block Host:следующее :serverlocation

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, и использовался правильный виртуальный хост с правильным именем.

Связанный контент