如何预防Nginx代理服务器中的“主机头注入漏洞”

如何预防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";
   }}

注意:以上服务器作为代理服务器。

答案1

“主机头注入漏洞”意味着您的服务器接受任何主机头,即使它不是您任何网站的有效主机名。在您的案例中,您配置了一个响应server任何主机名的捕获块,并将所有此类请求发送到您的 Web 应用程序。

在 nginx 中这个问题很容易修复。

首先,您需要保留servernginx 附带的默认块。不要以任何方式更改它。这将捕获带有无效 Host 标头的请求,并仅向其发送无害的“Web 服务器正在运行”文档或 403 Forbidden 错误,或两者兼而有之。

其次,您需要在server_name自定义server块的指令中仅指定您网站的有效主机名。不要使用_。例如server_name example.com www.example.com;

相关内容