hostspoofing.md 2.3 KB

[host_spoofing] Подделка заголовка запроса Host

Зачастую, приложению, стоящему за Nginx, необходимо передать корректный заголовок Host для корректной генерации различных URL-адресов (редиректы, ресурсы, ссылки в письмах и т.д.). Возможность его подмены злоумышленником может повлечь множестве проблем от фишинговых атак до SSRF, поэтому следует избегать таких ситуаций.

Возможно, ваше приложение так же ориентируется на заголовок запроса X-Forwarded-Host. В этом случае вам необходимо самостоятельно позаботится о его корректной установке при проксировании.

Как самостоятельно обнаружить?

Чаще всего эта проблема возникает в результате использования переменной $http_host вместо $host.

Несмотря на их схожесть, они сильно отличаются:

  • $http - хост в порядке приоритета: имя хоста из строки запроса, или имя хоста из заголовка Host заголовка запроса, или имя сервера, соответствующего запросу;
  • $http_host - заголовок запроса "Host".

Пример такой конфигурации:

location @app {
  proxy_set_header Host $http_host;
  # Other proxy params
  proxy_pass http://backend;
}

Что делать?

К счастью, все довольно очевидно:

  • перечислить корректные имена сервера в директиве server_name;
  • всегда использовать переменную $host, вместо $http_host.

Дополнительная информация