运维

隐藏 Nginx/Apahe 服务器响应的 server/X-Powered-By 等信息

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

隐藏 Nginx/Apahe 服务器响应的 server/X-Powered-By 等信息默认情况下,不管是 Apache 还是 Nginx,亦或是 Tengine 等 WEB 服务器软件,在访客请求数据时都会返回服务器软件、版本等信息。虽然在一定程度上方便维护,但是安全性上却大打折扣,比如说某个版本的 Nginx 曝出有 BUG,当恶意访客发现服务器的 Nginx 恰好是这个版本,就很有可能针对性发起攻击。这样一来我们就会想办法隐藏服务器回复的信息,降低安全风险。

Nginx + PHP 默认情况请求标头:

# curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 22 Aug 2018 11:50:01 GMT
Content-Length: 0
Connection: keep-alive
Server: Tengine/1.1
X-Powered-By: PHP/7.1.1

PHP X-Powered-By

X-Powered-By 字段是由 PHP 程序回复的,因此要修改 php.ini,修改 expose_php = On 为 Off:

expose_php = Off

重启下再看看请求标头:

# curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 22 Aug 2018 11:52:01 GMT
Content-Length: 0
Connection: keep-alive
Server: Tengine/1.1

可以看到 X-Powered-By 已经被隐藏。

Server信息

Server 字段是由 Apache/Nginx/Tengine 等程序回复,并且有两个地方可以看到,一个是在请求标头,一个是在错误页面。请求标头与 PHP 一样可以配置关闭。
Apache
修改 httpd.conf 配置 ,将 ServerSignature、ServerTokens 两个字段修改成与下面一致:

ServerSignature Off
ServerTokens Prod

Nginx
修改 nginx.conf 配置,将 server_tokens 设为 off:

server_tokens off;

重启程序后,我们再来看下请求:

# curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 22 Aug 2018 11:52:01 GMT
Content-Length: 0
Connection: keep-alive
Server: Tengine

可以看到版本号已经被隐藏,但是web服务程序名还在。
彻底隐藏或修改:
程序名与错误页面底部提示,就需要通过修改源码实现了,没办法通过开关设置。以 Nginx 为例,找到 src/http/ngx_http_header_filter_module.c:

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

和 src/core/nginx.h:

#define NGINX_VER          "nginx/" NGINX_VERSION

以及 src/http/ngx_http_special_response.c:

static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF

我们可以看出,我们将其中的 nginx 改为自己想要设置的名称就可以达到隐藏的目的,比如改为 podipod,则两个文件分别改为:podipod

static char ngx_http_server_string[] = "Server: podipod" CRLF;
static char ngx_http_server_full_string[] = "Server: podipod" CRLF;

#define NGINX_VER          "podipod" NGINX_VERSION

以及

static u_char ngx_http_error_tail[] =
"<hr><center>podipod</center>" CRLF
"</body>" CRLF
"</html>" CRLF

重新编译(只要 make 即可,不要 make install),然后替换编译后的 nginx (如 cp src/objs/nginx sbin/nginx)启动后,我们再来请求看看:

# curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 22 Aug 2018 11:55:01 GMT
Content-Length: 0
Connection: keep-alive
Server: podipod

查看错误页:
隐藏 Nginx/Apahe 服务器响应的 server/X-Powered-By 等信息
Server 信息中正确的web服务程序名已经被成我们指定为“podipod”了。

(0)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论