nginx的PHP环境下的一些安全设置

Nginx关闭版本显示信息并修改server显示信息

  • 隐藏版本信息
    Nginx 会在 http 头,或者出现错误页的时候会有醒目的版本号提示,为了安全,可以关闭这些信息。
    方法很简单,只需在 nginx.confhttp { 里头加入 server_tokens 的参数
http {  
include       mime.types;  
default_type  application/octet-stream;  
server_tokens off;     #关闭版本显示  
client_header_timeout       3m;  
client_body_timeout         3m;  
send_timeout                3m;  

保存之后重启nginx服务生效;

混淆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改为我们自己想要的文字即可,笔者就改为了GFW. 笔者输出的Server:GFW.(这个前提是你进行了第一个步句的操作,关闭了版本号)

如果你的版本号是开着的,你又想调戏下脚本小子.比如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就能达到我们的目的了。

隐藏PHP的版本号

PHP容易暴露的版本号在什么地方呢?其实也是在HTTP头,以类似X-Powered-By: PHP/5.2.11这种形式存在,大家可能会想到会不会是Nginx问题,而去到Nginx里面找相关配置,呵呵,其实这个是在PHP的配置文件php.ini里改动,打开php.ini,找到下面叙述:

;;;;;;;;;;;;;;;;;
; Miscellaneous ;
;;;;;;;;;;;;;;;;;

; 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.
; http://php.net/expose-php
expose_php = On

expose_php = On改为expose_php = Off就搞定了,当然,对于Apache服务器还有另外一个方法可以直接尝试在.htaccess文件中Header unset X-Powered-By,删除X-Powered-By节,不过我还是建议改动php.ini的expose_php。

nginx和.htaccess:禁止目录运行PHP

很多站长都有被挂马的经历,挂马不外乎两种:

  • 自己作孽安装不明来路的插件或主题。
  • 用户通过途径上传病毒、木马文件。

.htaccess禁止运行PHP


<Directory /home/wwwroot/content/uploadfile/>
php_flag engine off
</Directory>

Nginx禁止运行PHP


location /content/uploadfile/ {
    location ~ .*\.(php)?$ {
        deny all;
    }
}

nginx禁止用户访问隐藏文件和.htaccess文件

.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。

.htaccess文件包含了我们站点中所有的文件目录和路径,高危文件,一般是要隐藏的!不能裸奔!

站点配置文件(vhost)中禁止访问.htaccess文件语法如下:


location ~ /\.ht {

deny  all;

}

禁止访问所有目录(包括子目录)下的隐藏文件


location ~ /\. {

deny  all;

}

0 thoughts on “nginx的PHP环境下的一些安全设置
添加一条新回复 回到顶部

亲爱的,主人已经关闭了这篇文章的评论 。