软件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隐藏版本号