使用Nginx部署应用程序,存在一个http头文件信息披露漏洞,请求中默认会返回Nginx版本信息,攻击者可以根据版本号来了解相关漏洞并进行针对性攻击。

有三种方法:
第一种是修改配置文件;
第二种是修改源文件,需要重新编译nginx;
第三种是使用 more_clear_headers 模块,需要重新编译nginx。
方法1:使用server_tokens off 配置,可以用来隐藏nginx版本号信息。
打开nginx.conf配置文件,将server_tokens off;添加在http { … } 配置块内;默认无该配置项,需要手动添加。

配置完成后,重新加载配置nginx -s reload;

在Nginx中,server_tokens指令用于控制是否在响应头中显示 Nginx 的版本号。然而,即使将 server_tokens设置为 off,Nginx 仍然会显示 Server: nginx,只是不会显示版本号。
方法2:修改源码中web服务器所使用的nginx的名称和版本信息
第一种方法只能屏蔽版本号信息,无法屏蔽nginx名称,想要屏蔽服务名称的话需要对源码进行修改。
需要修改如下三个文件
./src/core目录下的nginx.h文件,将NGINX_VERSION值改成1.0.0.0;NGINX_VER值改成webserver
./src/http目录下的ngx_http_header_filter_module.c文件,将nginx改成webserver;
./src/http目录下的ngx_http_special_response.c文件,将将nginx改成webserver;
修改完成后重新编译;此时http头文件中server值显示的是webserver;
方法3:使用 more_clear_headers 模块
ngx_http_headers_more_module是一个第三方模块,允许你更灵活地操作 HTTP 响应头。通过这个模块,你可以完全清除 Server响应头。
下载headers-more-nginx-module-0.33模块,重新编译nginx
在Nginx 配置文件中,使用 more_clear_headers指令清除 Server响应头;
重新加载配置,nginx -s reload,头文件信息中清除了server响应头;
以上三种方法,只有方法3清除http头文件信息中server响应头,可以彻底杜绝信息泄露问题。
该文章在 2025/9/2 12:46:27 编辑过