上传前的安全校验

文件系统是攻击入口

文件上传系统天然是攻击入口。用户可以上传图片,也可以上传脚本、压缩包、伪装文件、超大文件或带敏感内容的材料。如果系统只关注「能不能传上来」,很快会出安全与合规问题。

安全不是最后加一个开关,而是一条贯穿上传、存储、访问和删除的治理链路。

上传前拦什么

上传前的目标是尽早拦截明显不合法的请求:

校验目的
权限与配额用户是否有上传权限、剩余额度
大小与频率单文件大小、单日总量、并发数
类型一致性扩展名 + Content-Type + 文件头魔数
高风险类型可执行文件、脚本文件直接拒绝

这些校验不能只放在前端。前端限制只是体验优化,服务端必须重新校验——攻击者会绕过前端直接调接口。

类型校验的层次

类型判断不要只信扩展名(用户可控、可伪造):

信息来源可信度
扩展名低
Content-Type中(客户端可声明)
文件头魔数高(读取真实头部字节)

以魔数为主,扩展名与 Content-Type 辅助对照,三者不一致按风险处理。

与「上传后扫描」的分工

上传前校验只能拦「明显违法」的文件。真正危险的文件(病毒、违规图片、伪装文件)需要完整内容才能判断——这是下一节「上传后异步扫描」的职责。

上传前校验:快、粗,拦明显不合法的
上传后扫描:慢、细,识别内容层面的风险

两段配合,才构成完整的文件安全链路。

一句话

上传前校验是文件安全的第一道闸:权限、大小、类型、文件名,服务端逐项重新校验,别把安全交给前端。

下一节看上传后的异步扫描,文件不能一上传就可访问。

发现内容有问题?

告诉我们哪里需要改进。