mirror of https://github.com/yandex/gixy
32 lines
2.3 KiB
Markdown
32 lines
2.3 KiB
Markdown
# [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) |