# [host_spoofing] Подделка заголовка запроса Host Зачастую, приложению, стоящему за Nginx, необходимо передать корректный заголовок `Host` для корректной генерации различных URL-адресов (редиректы, ресурсы, ссылки в письмах и т.д.). Возможность его подмены злоумышленником может повлечь множестве проблем от фишинговых атак до SSRF, поэтому следует избегать таких ситуаций. > Возможно, ваше приложение так же ориентируется на заголовок запроса `X-Forwarded-Host`. > В этом случае вам необходимо самостоятельно позаботится о его корректной установке при проксировании. ## Как самостоятельно обнаружить? Чаще всего эта проблема возникает в результате использования переменной `$http_host` вместо `$host`. Несмотря на их схожесть, они сильно отличаются: * `$http` - хост в порядке приоритета: имя хоста из строки запроса, или имя хоста из заголовка `Host` заголовка запроса, или имя сервера, соответствующего запросу; * `$http_host` - заголовок запроса "Host". Пример такой конфигурации: ```nginx location @app { proxy_set_header Host $http_host; # Other proxy params proxy_pass http://backend; } ``` ## Что делать? К счастью, все довольно очевидно: * перечислить корректные имена сервера в директиве `server_name`; * всегда использовать переменную `$host`, вместо `$http_host`. ## Дополнительная информация * [Host of Troubles Vulnerabilities](https://hostoftroubles.com/) * [Practical HTTP Host header attacks](http://www.skeletonscribe.net/2013/05/practical-http-host-header-attacks.html)