上传接口为什么危险
文件上传是 Web 攻击最常见的入口之一:攻击者把可执行脚本伪装成图片或文档上传,再通过访问该文件获得控制权。防护的关键不是单纯拦文件名,而是组合校验——扩展名白名单、真实文件头、内容特征,再加上存储侧的兜底,让上传成功的文件即便可疑也无法被当作脚本执行。
基本信息
| 适用平台 | WAF 侧检测 + 应用服务端校验 + 存储侧权限控制,三层配合 |
|---|---|
| 检测项 | 扩展名白名单、内容类型、文件头校验、恶意内容特征 |
| 处置动作 | 阻断、隔离送检、告警记录 |
| 兜底措施 | 上传目录禁止脚本执行、文件重命名存储、访问走独立域名 |
典型使用场景
- 门户与 OA 的附件上传:业务必须支持多种格式,白名单要贴合真实业务
- 图片与视频上传:需按文件头判断真实类型,防止图片马绕过扩展名校验
- 大文件上传:走独立通道并限速,避免上传接口成为带宽与性能瓶颈
- 多扩展名与解析差异:同时考虑中间件对 .php、.jsp、.phtml 一类后缀的不同处理
- 事后追溯:留存上传日志与文件样本,便于回溯投放来源
防护与联动
防护与联动
1. 白名单允许的扩展名按业务实际最小化,不用黑名单思路
2. 校验文件头与内容类型,避免仅看扩展名或 Content-Type
3. 上传文件重命名存储到非 Web 可执行目录,访问经应用转发
4. 大文件上传单独通道并限制频率与并发
5. 可疑文件联动沙箱或人工审阅,命中记录进事件台账校验层次对照
| 层次 | 能拦什么 | 容易被绕过的点 |
|---|---|---|
| 前端校验 | 明显的错误格式 | 抓包改包后完全失效 |
| WAF 规则 | 已知的恶意内容特征 | 变形与编码绕过 |
| 服务端校验 | 扩展名与内容类型不符 | 中间件解析特性差异 |
| 存储权限 | 上传文件被执行 | 目录配置错误时兜底失效 |
上传目录禁止脚本执行是投入产出比最高的一条:即使检测被绕过,攻击者拿到了文件也无法执行。