默认地,服务器HTTP
响应头会包含Apache
,Nginx
和php
版本号。
如下图:因为这会让黑客通过知道详细的版本号而发起已知该版本的漏洞攻击。
为了阻止这个,需要在httpd.conf
设置ServerTokens
为Prod
,这会在响应头中显示“Server:Apache
”而不包含任何的版本信息。下面是ServerTokens
的一些可能的赋值:
ServerTokens Prod 显示“Server: Apache” ServerTokens Major 显示 “Server: Apache/2″ ServerTokens Minor 显示“Server: Apache/2.2″ ServerTokens Min 显示“Server: Apache/2.2.17″ ServerTokens OS 显示 “Server: Apache/2.2.17 (Unix)” ServerTokens Full 显示 “Server: Apache/2.2.17 (Unix) PHP/5.3.5″
需要将php.ini
中的expose_php = On
,改为Off
,头信息中将隐藏X-Powered-By:PHP/7.1.0
1.隐藏版本号:
vi nginx.conf
在http
加上 server_tokens off
;
如下:
http { ……省略配置 server_tokens off; ->即可隐藏版本号 …….省略配置 }
重启nginx
后,我们返回的Server
头格式为Server:nginx ,而且nginx
自己的404
页面也没有版本号的信息
2.返回自定义的server
混淆Server
信息不愿意告诉别人我是使用什么Server
的,但没有找到相关文献去隐藏它,所以我们可以混淆她,如把Server
返回GFW
之类的。
大部分情况下,脚本的小子的扫描工具是扫描我们response
返回的header
中的server
信息.我们可以采用编译源码的方法来改变返回的Server
,笔者的版本是nginx1.7.0
,我们修改src/http/ngx_http_header_filter_module.c
中的48行
static char ngx_http_server_string[] = "Server: nginx" CRLF;
把其中的nginx
改为我们自己想要的文字即可,笔者就改为了YSY
. 笔者输出的Server:YSY
.(这个前提是你进行了第一个步句的操作,关闭了版本号)
如果你的版本号是开着的,你又想调戏下脚本小子.比如Server:billgate/1.9.0
我们修改src/core/nginx.h
定位到13-14行
#define NGINX_VERSION "1.7.0" #define NGINX_VER "nginx/" NGINX_VERSION
Server
返回的就是常量NGINX_VER
, 我们把NGINX_VERSION
大小定义为1.9.0
,nginx
改为billgate
就能达到我们的目的了
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!