У меня есть debian 8 VPS, работающий с nginx 1.10.3.
Я размещаю несколько веб-сайтов на Symfony 3.2 (использую php7-fpm) и сталкиваюсь с проблемами внедрения заголовков. Я не могу понять, связана ли проблема с nginx или с конфигурацией проекта Symfony.
Я сейчас не использую LoadBalancer, например Varnish или Amazon AWS.
Когда кто-то отправляет запрос с недействительным X-Forwared-Host
Такие как :
X-Forwarded-Host: pg_sleep(2)
Затем он получает 500 Internal Server Error
, и я вижу в логах критическую ошибку:
UnexpectedValueException: "Invalid Host "pg_sleep(2)" at [...]/var/bootstrap.php.cache"
Я могу легко воспроизвести его (только в производственной среде, используя этот файл bootstrap.php.cache) с помощью curl:
curl -I\
-H "X-Forwarded-Host: pg_sleep(2)"\
"https://my-domain.tld"
Некоторые другие ценности, которые я получил, могут быть X-Forwarded-Host: *.domain.tld
, X-Forwarded-Host: -1 or 2+429-429-1=0+0+0+1 --
, X-Forwarded-Host: -1; waitfor delay '0:0:14' --
и т.п.
Я похож на укол.
Моя цель - обработать такие недопустимые заголовки и вернуть, например, статус 444 или, по крайней мере, предотвратить запуск приложения. 500 Internal Server Error
.
Мой первый вопрос: следует ли мне пытаться перехватывать такие недопустимые заголовки внутри конфигурации nginx (используя модуль?) Или это то, что должно обрабатываться проектом symfony вместо этого?
Я прочитал это руководство: http://symfony.com/doc/current/components/http_foundation/trusting_proxies.html
Вы также должны убедиться, что ваш прокси-сервер фильтрует несанкционированное использование этих заголовков, например если прокси-сервер изначально использует заголовок X-Forwarded-For, он не должен позволять клиентам отправлять Forwarded-заголовки в Symfony.
Это заставляет меня думать, что этим должен заниматься nginx, тогда ... Как?
Я попытался проверить хост внутри своего блока server {}, но он его не перехватывает ...
server {
listen 443;
# [...]
if ($host !~ ^(my-domain.tld)$ ) {
return 444;
}
# [...]
}
Похоже, можно было бы использовать headers_more
модуль, но это лучшая практика?