围绕文件类型、大小、解析、存储和下载权限设计上传验收,避免只检查扩展名就认为安全。

文件上传的风险并不止于“能不能传脚本”。大文件、解析器缺陷、越权下载和可执行存储目录都可能成为问题。验收应覆盖文件完整生命周期,而不是只看表单允许选择哪些后缀。
把上传路径拆成五个阶段
接收时检查身份、权限、大小与频率;识别时结合业务允许的扩展名、内容类型和实际内容;处理时限制解析进程的资源与权限;存储时隔离不可信文件;下载时重新检查访问权限和响应方式。
OWASP 的上传指南指出,客户端 Content-Type 可以伪造,单一校验不足以形成完整保护,并建议使用随机文件名、限制尺寸、隔离存储及按需要实施扫描。具体控制应与允许的文件类型和业务用途匹配。
用无害样本测试边界
- 允许类型的正常文件应被接收,并能按权限下载。
- 扩展名与内容不一致的测试文件应按策略拒绝或进入隔离流程。
- 超过大小限制的文件应及时停止处理,不让工作队列持续积压。
- 同名文件不应覆盖其他用户内容,文件名中的特殊字符不应变成路径。
- 未登录及其他租户访问下载地址时,不能取得私密文件。
若需要解压缩,应单独限制展开后的体积、条目数量和路径范围;仅限制压缩包大小无法代表实际处理成本。所有测试在授权环境中使用受控样本完成。
处理失败要有明确去向
区分已接收、待检查、通过、拒绝与处理失败等状态。扫描超时不能悄悄变成放行,用户也应能看到可理解的失败原因。临时文件应按策略清理,避免遗留在公开目录。
上线后关注处理耗时、拒绝原因和存储增长。新增格式或升级解析库时重跑测试,避免前端已经开放一种格式,而后端还沿用旧的安全假设。
参考:OWASP:File Upload Cheat Sheet。核对日期:2026年10月4日。
