#配置文件php版本下php.ini
一、php.ini 核心配置(拒绝上传)
; ========== 核心:关闭文件上传功能 ========== file_uploads = Off ; 下面这几项虽然file_uploads=Off时不生效,配套写上,收紧限制 upload_max_filesize = 0 post_max_size = 2M max_file_uploads = 0 ; ========== 配套LFI相关(按需保留,如果你只是单纯关闭上传) ========== ;open_basedir = /var/www/html allow_url_fopen = Off allow_url_include = Off ; ========== 调试,方便看报错 ========== display_errors = On display_startup_errors = On memory_limit = 128M max_execution_time = 30 max_input_time = 30关键参数:
file_uploads = Off
PHP 一旦设置这个,会直接拒绝接收所有multipart/form-data文件上传请求。
DVWA 文件上传页面点击上传,PHP 不会接收文件,$_FILES数组为空,直接上传失败。
二、额外两层防御(Apache 层面 + 目录权限,多层拒绝上传)
1. 锁定 uploads 目录权限(禁止写入,就算 php 上传开了也写不进去)
# 移除写权限,www-data用户不能新建/修改文件 sudo chown -R www-data:www-data /var/www/html/dvwa sudo chmod -R 555 /var/www/html/dvwa/hackable/uploads555:只读,不能写入任何文件。
2. Apache 配置拦截(可选,额外防护,禁止 POST 上传请求)
编辑 apache 站点配置,一般路径/etc/apache2/sites-available/000-default.conf
在<VirtualHost>块内添加:
# 禁止上传文件表单类型 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{Content-Type} multipart/form-data [NC] RewriteRule ^ - [R=403,L] </IfModule>开启后:所有 multipart/form-data 表单直接返回 403 禁止访问。
三、重启 Apache 生效
sudo systemctl restart apache2四、验证效果
- 访问 DVWA 文件上传页面,选择任意文件点击上传
PHP 会提示类似警告:Warning: File uploads are disabled in php.ini
文件不会被接收,上传直接失败。 - 访问 phpinfo 页面,查看
file_uploads→Off。
五、区分两种防御方案(二选一)
- 方案 A(推荐,上面这套):php.ini file_uploads=Off
PHP 底层直接关掉上传,最彻底,任何 PHP 代码都接收不到上传文件。 - 方案 B(仅目录锁死,php 上传还开着):file_uploads=On,但 uploads 目录 chmod 555 只读
PHP 能收到文件,但无法写入磁盘;DVWA 会提示上传失败,适合演示权限层面防御。
六、生产环境补充说明
- 生产环境不建议直接
file_uploads=Off,如果业务完全不需要上传才用这个;业务需要上传时,不能关闭,改用文件后缀、MIME、文件头校验。 allow_url_include=Off是防御 RFI 远程文件包含。