最后更新时间:2026-09-22 18:54:17
VVCMS 的上传校验是 fail-closed 的:只有扩展名命中白名单才放行,不在名单里直接拒绝。这与"黑名单拦几个危险类型、其他都放行"的做法相反,安全性更高,但表现上更严格。
默认允许的类型:
| 分类 | 扩展名 |
|---|---|
| 图片 | jpg jpeg png gif webp bmp ico |
| 文档 | pdf doc docx xls xlsx ppt pptx txt md csv json xml |
| 压缩包 | zip rar 7z gz tar |
| 音视频 | mp3 wav mp4 webm |
另外有一份危险扩展名硬黑名单(可执行、脚本类),即使被写进白名单也会被拒绝,无法通过配置放开。
系统取的是「文件名中第一个点之后的连续字母数字段」,不是简单的 filepath.Ext。这样处理是为了防一类绕过:
evil.jsp;.jpg这种名字用常规方法会被判成 .jpg,但实际可执行部分藏在前面。当前写法会把它判成 jsp 并拒绝。
.php 改成 .png 也不行——系统会结合 MIME 类型做归类校验。file,写错会直接返回文件解析错误。filename 必须带扩展名,且不能包含 /、\ 或 ..。这几种情况不是故障:
白名单是单一来源管理的:外部 API、后台上传、MCP 的 upload_file 都从同一处派生,改一处即可全局生效,不会出现"API 能传、MCP 传不了"的割裂。
放开的唯一例外是危险扩展名黑名单,那部分不提供配置开关。