# VSCMS 安全审计报告

> 日期：2026-09-25 ｜ 环境：cms.chuqi.cn（M1-M6 完成后）
> 方法：接口未授权访问、路径穿越、上传安全、网关鉴权、敏感文件、沙箱执行、性能抽样

## 一、审计结果（12/12 通过）

| # | 检查项 | 方法 | 结果 |
| --- | --- | --- | --- |
| 1 | 未登录访问业务接口 | GET /adminapi/site、/publish、/code/tree、/ai/status、/user | 全部 401 ✅ |
| 2 | 源码编辑路径穿越 | `path=../../etc/passwd`、`blocks/../../.env` | 「文件路径不合法」拦截 ✅ |
| 3 | 媒体上传脚本文件 | 上传 x.php | 「不支持的文件类型」拒绝 ✅ |
| 4 | 上传目录脚本执行 | /storage/*.php 规则 | Nginx deny（正则优先） ✅ |
| 5 | 官方总控未登录 | GET /official/license | 302 → /official/login ✅ |
| 6 | AI 网关未授权 | POST /official/api/ai/...（无令牌） | 403 license_error ✅ |
| 7 | 激活无效授权码 | VSCMS-FAKE-... | 403「授权码不存在」✅ |
| 8 | 敏感文件访问 | /.env、/server/.env、/server/app/*.php | 全部 404 ✅ |
| 9 | 安装向导 | /install/（已安装环境） | 已封禁 404 ✅ |
| 10 | 用户模板沙箱 | `{% include %}` 覆盖模板 | 拦截并报错「not allowed」✅ |
| 11 | 表单防刷 | 蜜罐字段 + IP 频率限制（5 次/10 分钟） | 生效 ✅ |
| 12 | 域名绑定命令注入 | 域名正则白名单 + escapeshellarg | 不通过 ✅ |

## 二、性能抽样（串行 50 次，本机）

| 场景 | 平均 | P50 | P95 |
| --- | --- | --- | --- |
| 静态 SPA（/admin/） | 1.3ms | 1.3ms | 1.5ms |
| API（/api/common/settings） | 12.1ms | 12.0ms | 13.3ms |
| 整页 Twig 渲染（预览） | 98.6ms | 100.3ms | 102.9ms |
| 发布（16 文件） | — | 约 160ms/次 | — |

## 三、已知限制与建议

1. 发布站点默认仅 HTTP→已支持自动 Let's Encrypt（绑定域名时申请）；如遇 acme 限流可手工重试
2. AI 任务为同步执行（1-2 分钟/次），高并发场景建议后续接队列
3. 官方总控为服务端渲染轻量后台，会话 Cookie 未加 Secure（部署在 HTTPS 后建议补充）；在线支付未接入
4. 交付前检查：删除演示数据（`php think cms:demo --reset` 重建）、修改默认账号、确认 `deploy/keys/` 不在交付包
5. 建议给官方总控后台增加登录失败限流（当前依赖内网/强密码）

## 四、结论

核心攻击面（未授权访问、注入、穿越、上传、沙箱逃逸、授权绕过）均无高危发现，达到可交付标准。
