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

aks*_*aks 2 nginx web-hosting proxypass host-headers

请帮助我防止给定的“ 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";
   }}
Run Code Online (Sandbox Code Playgroud)

注:以上服务器用作代理服务器。

Mic*_*ton 5

“主机标头注入漏洞”意味着您的服务器正在接受任何主机标头,即使它不是您网站的有效主机名。在您的情况下,您已经配置了一个包罗万象的server块来响应任何主机名并将所有此类请求发送到您的 Web 应用程序。

这在 nginx 中很容易修复。

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

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