梦想还是要有的, 万一实现了呢?

Apache、Nginx、PHP隐藏版本号

Linux 拈花古佛 7474℃ 0评论 繁體

软件Bug是和版本相关的,所以把软件的版本号暴露出去对黑客来说是有意义的,所以一般应该隐藏版本号。

默认,Apache、Nginx、PHP都会发送自己的版本号,如下:

Connection		Keep-Alive
Content-Type		text/html
Date			Sat, 30 Jun 2012 08:47:38 GMT
Keep-Alive		timeout=5, max=100
Server			Apache/2.4.2 (Unix)
Transfer-Encoding	chunked
X-Powered-By		PHP/5.3.14

以上信息暴露了使用的是Apache和PHP,版本号分别是2.4.2和5.3.14,它们安装在类Unix系统上。

Connection		keep-alive
Content-Encoding	gzip
Content-Type		text/html
Date			Sat, 30 Jun 2012 08:52:18 GMT
Server			nginx/1.0.12
Transfer-Encoding	chunked
Vary			Accept-Encoding
X-Powered-By		PHP/5.3.14

以上信息暴露了使用的是Nginx和PHP,版本号分别是1.0.12和5.3.14。

对于Apache,如果要隐藏版本号可以在配置文件中添加(如果存在则修改)如下指令:
ServerTokens Prod
ServerSignature Off
这样版本号就会被隐藏,但是还是会出现Apache。关于ServerTokens指令,可以查看http://httpd.apache.org/docs/2.4/mod/core.html#servertokens,这里有非常详细的示例。

如果要把Apache也修改掉,必须是修改源代码,然后重新编译安装了,进入Apache的源码目录下的include目录,然后编辑ap_release.h这个文件:

#define AP_SERVER_BASEVENDOR “Apache Software Foundation”
#define AP_SERVER_BASEPROJECT “Apache HTTP Server”
#define AP_SERVER_BASEPRODUCT “Apache”

#define AP_SERVER_MAJORVERSION_NUMBER 2
#define AP_SERVER_MINORVERSION_NUMBER 2
#define AP_SERVER_PATCHLEVEL_NUMBER 15
#define AP_SERVER_DEVBUILD_BOOLEAN 0

根据需要修改。

对于Nginx,需要在配置文件的http{}段里面加入“server_tokens off;”,这样Nginx就不广播自己的版本号了,但是由于Nginx是通过FastCGI模式来进行的,在默认的FastCGI配置文件中默认把版本号传递给PHP进程,所以在运行PHP程序时它还是暴露了Nginx的版本号。

找:
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
改为:
fastcgi_param SERVER_SOFTWARE nginx;

这里甚至可以把nginx修改成其它的期望字符串。

对于PHP,就是要去掉X-Powered-By PHP/5.2.13,编辑php.ini配置文件,修改或加入: expose_php = Off

转载请注明:拈花古佛 » Apache、Nginx、PHP隐藏版本号

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址