禁止LNMP架构应用的文件上传

需求来源

我们有个公共平台需要既能够在内网访问,也能够在外网访问,但是为了避免有人通过该平台随意传输文件,我们需要去掉这个平台的上传功能。

实现方案

为了保险起见,我们采用多方案并行的方式。

在Nginx中禁止上传

比如我添加了一个upload.conf的配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
map $content_type $upload {
default 0;
"~*multipart/form-data" 1;
}

server
{
listen 80;
server_name upload.10jqka.com.cn;
root /home/zhouchangju/html;

location / {
if ($upload = 1) {
return 403;
}
#这下面补上其他的nginx配置信息
}
}

在PHP中禁止上传

方案一:
在php.ini中添加如下配置,禁用PHP的上传相关的函数:

1
disable_functions = move_uploaded_file

方案二:
写一个PHP脚本来判断本次请求是否有上传数据,然后将该脚本加入php.ini的auto_prepend_file配置里:

1
auto_prepend_file = "/path/to/file.php"

参考资料

Nginx的map功能

通过map判断请求头信息