一、隐藏nginx头信息
什么是header信息?header信息是访客访问你的网站时,web服务返回给客户端的一段信息,包含了网页的一些基本情况。那么为什么要修改 header信息呢?主要是为了防止被居心不良的人利用来获取漏洞信息,例如:通过最最简单的获取header信息发现你的web服务器版本是 nginx/0.7.60,现在又已知这个版本的nginx有某个漏洞,那么就可以利用这个漏洞来攻击你了。互联网信息更新非常快,web服务程序的更新 也是很频繁,我们很多时候由于种种原因不能及时打上补丁,对服务器安全很不利,如果修改header信息达到隐藏web服务器版本的效果,就可以在某种程 度上消除一些隐患。
nginx的header信息修改需要修改源码,因此必须在编译前作修改,如果已经编译了,只能修改源码后重新编译。
1、修改src/core/nginx.h,将
#define NGINX_VERSION "1.1.1"
#define NGINX_VER "apache/" NGINX_VERSION中的信息修改掉。
2、修改src/http/ngx_http_header_filter_module.c,将
static char ngx_http_server_string[] = "Server: apache" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;中的信息修改掉。
3、修改nginx-0.7.30/src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"<center> "NGINX_VER" </center>" CRLF
"<hr><center>****http://www.linuxtone.org****</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
static u_char ngx_http_error_tail[] =
"<hr><center>LTWS</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
如果要修改探针中显示的web服务软件信息,就修改nginx安装目录中conf/fcgi.conf,将
fastcgi_param SERVER_SOFTWARE nginx;中的信息修改掉。这个是配置文件,是在编译之后修改的。
我写了几句命令,可以直接在shell里运行修改掉文件:
sed -i ‘s:#define NGINX_VERSION "0.7.64":#define NGINX_VERSION "1.0":g‘ /usr/local/src/nginx-0.7.64/src/core/nginx.h
sed -i ‘s:#define NGINX_VER "nginx/" NGINX_VERSION:#define NGINX_VER "XXXserver/" NGINX_VERSION:g‘ /usr/local/src/nginx-0.7.64/src/core/nginx.h
sed -i ‘s#"Server: nginx"#"Server: XXXserver"#‘ /usr/local/src/nginx-0.7.64/src/http/ngx_http_header_filter_module.c
改的就是上面说的三个地方,将nginx/0.7.64改成XXXserver/1.0,要用的话需要自己修改源码包存放路径、安装后文件的路径和要替换的nginx版本号。
2、隐藏php版本信息
下面对php的配置文件php.ini进行配置
默认情况下
expose_php = On
将其改为
expose_php = Off
为什么,可以看这段解释
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header). It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
然后禁止一些涉及php安全的函数
disable_functions = phpinfo, get_cfg_var //禁止phpinfo和get_cfg_var等函数
display_errors = Off //禁止爆出错误
allow_url_fopen = Off //这个关闭,就没有办法取远程内容了,但是可以用变通,用curl远程读取的方法做到
safe_mode = On //开启安全模式,这个开了,可能会有些php功能没办法使用了无论如何,还是要我们的程序设计的完美,一般来说,单纯更具对系统攻击很难,如果是程序有漏洞,那攻击就简单了。