常见漏洞验证121 条

文件上传功能验证

上传功能需从类型校验、存储位置、访问方式三方面评估:常见问题是校验只在客户端或只看扩展名。

文件上传功能验证

文件上传功能要从类型校验、存储位置、访问方式三方面评估。常见问题是校验只做在客户端(JavaScript 限制扩展名),或者服务端只看扩展名不看内容;更严重的是上传目录可被解析执行,或上传文件可被外网直接访问。验证思路是逐项确认校验发生在哪一层:先改扩展名上传,再修改 Content-Type 重放,再尝试双扩展名与大小写混合,最后检查上传后的访问路径与权限。所有样本一律使用无害文本文件,验证后立即删除,绝不使用真实可执行文件。

基本信息

校验点扩展名、MIME、文件头、内容解析
存储上传目录是否可执行、是否可被外网直接访问
访问下载接口鉴权与文件名处理
验证原则全程使用无害文本文件,验证后立即清理
修复方向服务端白名单校验 + 内容检测 + 目录禁止执行

典型使用场景

  • 头像与图片上传:最基础的上传点,多数只做前端校验
  • 附件与文档:企业系统常见,需关注存储与下载鉴权
  • 导入功能:Excel、CSV、XML 导入,常含解析与路径处理
  • 富文本编辑器:内嵌上传组件,校验常不统一
  • 压缩包上传:解压功能需关注路径穿越与覆盖

验证清单

验证清单
1. 改扩展名上传(内容不变)观察接纳情况
2. 修改 Content-Type 重放上传请求
3. 上传双扩展名与大小写混合名,观察存储与回显
4. 检查上传后的访问路径与权限(是否可直接下载)
5. 检查上传目录是否可被解析执行
# 所有样本使用无害文本文件,验证后立即删除

校验层级与有效性

校验层级常见做法有效性
前端 JS 校验限制扩展名无效,可绕过,仅提升体验
服务端扩展名黑名单禁止 php、jsp 等较弱,扩展名变体易绕过
服务端扩展名白名单仅允许 jpg、png 等较有效,需注意解析差异
MIME 类型校验检查 Content-Type中等,可被伪造
文件头与内容检测校验魔数、重编码图片较强,配合白名单更佳
存储与执行隔离独立域名、目录禁执行关键防线,缺失时后果最严重
修复视角:服务端做扩展名白名单校验并结合内容检测;上传目录禁止解析执行、随机化文件名、使用独立域名或对象存储。
用真实可执行文件测试会构成武器化风险;只测前端 JS 校验被绕过也不足以证明服务端存在缺陷,需确认服务端实际行为。

易错点

  • 用真实可执行文件测试,构成武器化风险,应改用无害文本样本
  • 只测前端 JS 校验被绕过,未确认服务端行为,结论不成立
  • 上传测试文件后忘记删除,成为遗留隐患
  • 忽略上传目录可被解析执行这一关键点,漏掉最严重的后果

数据来源与参考

  • OWASP WSTG WSTG-BUSL-09
  • OWASP Cheat Sheet:File Upload
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌