☰
拒绝文件上传
2026/10/1 19:53:06 网站建设 项目流程

#配置文件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/uploads

555:只读,不能写入任何文件。

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

四、验证效果

  1. 访问 DVWA 文件上传页面,选择任意文件点击上传
    PHP 会提示类似警告:
    Warning: File uploads are disabled in php.ini
    文件不会被接收,上传直接失败。
  2. 访问 phpinfo 页面,查看file_uploads→Off。

五、区分两种防御方案(二选一)

  1. 方案 A(推荐,上面这套):php.ini file_uploads=Off
    PHP 底层直接关掉上传,最彻底,任何 PHP 代码都接收不到上传文件。
  2. 方案 B(仅目录锁死,php 上传还开着):file_uploads=On,但 uploads 目录 chmod 555 只读
    PHP 能收到文件,但无法写入磁盘;DVWA 会提示上传失败,适合演示权限层面防御。

六、生产环境补充说明

  • 生产环境不建议直接file_uploads=Off,如果业务完全不需要上传才用这个;业务需要上传时,不能关闭,改用文件后缀、MIME、文件头校验。
  • allow_url_include=Off是防御 RFI 远程文件包含。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询