请帮助我防止给定的“主机头注入漏洞”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 中这个问题很容易修复。
首先,您需要保留server
nginx 附带的默认块。不要以任何方式更改它。这将捕获带有无效 Host 标头的请求,并仅向其发送无害的“Web 服务器正在运行”文档或 403 Forbidden 错误,或两者兼而有之。
其次,您需要在server_name
自定义server
块的指令中仅指定您网站的有效主机名。不要使用_
。例如server_name example.com www.example.com;