需求来源
我们有个公共平台需要既能够在内网访问,也能够在外网访问,但是为了避免有人通过该平台随意传输文件,我们需要去掉这个平台的上传功能。
实现方案
为了保险起见,我们采用多方案并行的方式。
在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; } } }
|
在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判断请求头信息