Назад | Перейти на главную страницу

Как предотвратить «уязвимость внедрения заголовка хоста» в прокси-сервере Nginx

Пожалуйста, помогите мне предотвратить "уязвимость внедрения заголовка хоста" в данном "Файл конфигурации Nginx"

 server {
    listen 80 default_server;
    listen [::]:80 default_server;       
    root /var/www/html;        
    index index.html index.htm index.nginx-debian.html;
    server_name _;
            location / {
            proxy_pass http://IP_1/;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
            add_header Cache-Control "no-cache";                
    }
    location /kuphubadmin/ {                
            proxy_pass http://IP_2/;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
            add_header Cache-Control "no-cache";
   }}

Примечание. Указанный выше сервер используется в качестве прокси-сервера.

«Уязвимость внедрения заголовка хоста» означает, что ваш сервер принимает любой заголовок хоста, даже если это недопустимое имя хоста для любого из ваших веб-сайтов. В вашем случае вы настроили универсальную server блок, который отвечает на любое имя хоста и отправляет все такие запросы вашему веб-приложению.

Это легко исправить в nginx.

Во-первых, вам нужно оставить в покое значение по умолчанию server блок, поставляемый с nginx. Ни в коем случае не меняйте. Это перехватит запросы с недопустимыми заголовками Host и отправит им только безобидный документ «веб-сервер работает» или ошибку 403 Forbidden, или и то, и другое.

Во-вторых, вам нужно указать только действительные имена хостов для вашего сайта в server_name директива вашего обычая server блок. Не использовать _. Например server_name example.com www.example.com;