这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
上传前的安全校验
文件系统是攻击入口
文件上传系统天然是攻击入口。用户可以上传图片,也可以上传脚本、压缩包、伪装文件、超大文件或带敏感内容的材料。如果系统只关注「能不能传上来」,很快会出安全与合规问题。
安全不是最后加一个开关,而是一条贯穿上传、存储、访问和删除的治理链路。
上传前拦什么
上传前的目标是尽早拦截明显不合法的请求:
| 校验 | 目的 |
|---|---|
| 权限与配额 | 用户是否有上传权限、剩余额度 |
| 大小与频率 | 单文件大小、单日总量、并发数 |
| 类型一致性 | 扩展名 + Content-Type + 文件头魔数 |
| 高风险类型 | 可执行文件、脚本文件直接拒绝 |
这些校验不能只放在前端。前端限制只是体验优化,服务端必须重新校验——攻击者会绕过前端直接调接口。
类型校验的层次
类型判断不要只信扩展名(用户可控、可伪造):
| 信息来源 | 可信度 |
|---|---|
| 扩展名 | 低 |
| Content-Type | 中(客户端可声明) |
| 文件头魔数 | 高(读取真实头部字节) |
以魔数为主,扩展名与 Content-Type 辅助对照,三者不一致按风险处理。
与「上传后扫描」的分工
上传前校验只能拦「明显违法」的文件。真正危险的文件(病毒、违规图片、伪装文件)需要完整内容才能判断——这是下一节「上传后异步扫描」的职责。
上传前校验:快、粗,拦明显不合法的
上传后扫描:慢、细,识别内容层面的风险
两段配合,才构成完整的文件安全链路。
一句话
上传前校验是文件安全的第一道闸:权限、大小、类型、文件名,服务端逐项重新校验,别把安全交给前端。
下一节看上传后的异步扫描,文件不能一上传就可访问。
