Files
platforms/docs/平台总后台审计报告-2026-07-27.md

56 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 平台总后台审计报告2026-07-27
## 范围与结论
本次审计覆盖 46 个平台后台资源34 个可写资源、11 个只读资源和 1 个仅追加的安全事件处置资源。后端资源契约现同时声明领域、资源名、HTTP 路径、页面类型和读写模式,并由运行时注册路由生成清单。前端审计据此逐项校验后端路由、前端资源声明、实际加载的页面组件和带菜单元数据的路由;任一层缺失均以 `领域/资源: missing <layer>` 失败。
## 发现与处置
| 发现 | 处置 | 验证 |
| --- | --- | --- |
| 只读页面的静态检查未覆盖状态变更调用 | 将 `resourceApi.updateStatus` 纳入只读页的变更操作集合,同时覆盖 create、update、archive | `audit-check.test.mjs` 的只读页用例 |
| 前端资源与后端路由只按资源名和文件名进行粗略匹配 | `ResourceContract.Path` 成为唯一后端路径声明;审计逐项校验 GET/POST/PUT/PATCH/DELETE按资源模式以及资源路径一致性 | Go 的 `TestEveryContractHasRegisteredRoute``pnpm audit:platform` |
| 页面存在但未被菜单路由实际加载时可能漏检 | 审计读取全部路由模块,解析页面动态导入,再确认页面通过 `getResource(契约路径)` 使用对应资源且路由具有 `menu.platform.*` 元数据 | `audit-check.test.mjs` 的菜单映射用例 |
| API 或页面可能展示、提交数据库自增 `id` / `*_id` | 对 `src/api``src/views` 全量扫描;详情页的显式过滤逻辑被识别为防护而非泄漏 | `pnpm audit:platform` |
| 仅追加处置和只读状态写入存在审计盲区 | 处置资源必须由 `saf_event` 详情动作触发、不可拥有独立页面;后端仅允许 GET/POST且按事件标识查询处置历史只读资源扫描 API、路由和页面中的 `updateStatus` | 6 个 `audit-check.test.mjs` 用例及逐契约路由方法测试 |
## 身份字段与保留理由
- 对外 HTTP 仅使用 `identity` 及关联的 `*_identity`;数据库主键 `id` 和关系外键 `*_id` 仍用于 GORM 关联、索引和内部查询,并由响应投影剔除,不能删除。
- `status``version``created_at``updated_at` 是归档、乐观并发和审计所需实体元数据,予以保留。
- `product_snapshot``report_metric_snapshot` 保留历史商品及报表快照,避免后续主数据变更影响历史记录。
- 审计的 `before_data``after_data``operator_identity`,以及审批的 `handler_identity``handled_at` 用于追踪处置人和决策,不可作为冗余清除。
## 冗余清理
未删除模型字段或页面。审计没有找到同时满足“不在需求、无后端调用、无前端消费者、无测试或迁移依赖”的候选项;为避免移除潜在兼容入口,保留现有非契约文件,且不将它们纳入菜单与资源契约。
## 验证命令
以下命令在提交前执行:
```powershell
cd backend/api
go test ./...
go build ./cmd/main
go test ./internal/routers -run '^TestEveryContractHasRegisteredRoute$' -v
cd ../../frontend/platform_admin
node --test scripts/audit-check.test.mjs
pnpm type:check
pnpm lint
pnpm audit:platform
pnpm build
```
| 命令 | 退出码 | 结果 |
| --- | --- | --- |
| `go test ./...` | 0 | 通过 |
| `go build ./cmd/main` | 0 | 通过 |
| `go test ./internal/routers -run '^TestEveryContractHasRegisteredRoute$' -v` | 0 | 通过 |
| `node --test scripts/audit-check.test.mjs` | 0 | 通过6 个审计用例 |
| `pnpm type:check` | 0 | 通过 |
| `pnpm audit:platform` | 0 | 通过 |
| `pnpm build` | 0 | 通过 |
| `pnpm lint` | 1 | 阻塞Biome 配置在本目录要求 `.gitignore`。以 `--vcs-root=../..` 启动后发现 187 个既有全仓格式/未使用变量错误;未将无关全仓格式化混入本次审计修复。 |