fix: 全系统审计问题修复 — 安全/数据完整性/功能缺陷/UX (Phase 1-5)
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

Phase 1 安全热修复:
- P0-1: /uploads 文件服务添加 JWT 认证中间件(支持 header + query param)
- P0-2: analytics/batch 路由从 public 移到 protected_routes
- P0-3: plugin engine SQL 注入修复(format! → 参数化查询)
- P0-new: stats_service compute_avg_field 字段白名单 + FLOAT8 类型转换

Phase 2 数据完整性:
- P0-4: 组织删除级联检查(添加部门存在性校验)
- P0-5: 部门删除级联检查(添加岗位 + 用户存在性校验)
- P0-8: workflow on_tenant_deleted 实现 5 实体批量删除
- P0-7: 并行网关 race condition 修复(consumed → completed 原子转换)

Phase 3 P1 后端 Bug:
- P1-12: plugin host 表名消毒(使用 sanitize_identifier)
- P1-10: workflow deprecated 状态转换(published → deprecated)
- P1-11: workflow 更新验证条件(nodes/edges 任一变化即验证)
- P0-9: 小程序 .gitignore 添加 .env/.env.*/日志
- P1-19: 小程序加密密钥替换为 64 字符强密钥

Phase 4 消息模块:
- P1-5: 通知偏好 GET 路由 + handler
- P1-4: 消息模板 update/delete CRUD + version
- P2-8: mark_all_read SQL 添加 version + 1
- P2-7: markAsRead 改为乐观更新 + 失败回滚

Phase 5 前端修复:
- P2-9: 通知面板点击导航到 /messages
- P2-1: 随访任务患者名批量 ID 解析(替代 UUID 显示)
- P2-5: AppointmentList 分离 patient_id/doctor_id 分别调用 API
- P2-17: PluginMarket installed 字段修正(name → id)
- P3-3: 路由标题 fallback 改为模式匹配(支持 :id 动态路径)
- P2-15: workflow updateDefinition 添加 version 字段
- P3-9: Kanban 版本使用记录实际 version
- P2-21: secure-storage 生产环境无密钥时阻止存储
- P3-11: destroyOnHidden → destroyOnClose
- P3-13: PendingTasks 深色模式 Tag 颜色适配

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
iven
2026-04-26 19:16:23 +08:00
parent a19b097409
commit 83fe89cbcd
33 changed files with 1238 additions and 70 deletions

View File

@@ -0,0 +1,52 @@
# HMS 审计摘要 — 一页纸
> 2026-04-26 | 全系统审计Web + 小程序)
## 总览
| | P0 | P1 | P2 | P3 | P4 | 合计 |
|---|---|---|---|---|---|---|
| 安全 | 4 | 2 | 2 | | | 8 |
| 数据完整性 | 5 | 2 | 1 | | | 8 |
| 功能缺失/缺陷 | | 12 | 8 | 5 | | 25 |
| UX/代码质量 | | | 9 | 10 | 6 | 25 |
| 配置/运维 | | 2 | 2 | | | 4 |
| **合计** | **9** | **18** | **22** | **15** | **6** | **72** |
## 必须立即修复Top 5
1. **上传文件无认证** — 医疗文档公开可访问,合规风险极高
2. **SQL 注入**plugin engine `load_plugin_config`)— 改用参数化查询
3. **小程序 .env 未加入 .gitignore** — 含弱加密密钥,可能意外泄露
4. **组织/部门/岗位级联删除缺失** — 软删除后数据完整性破坏
5. **统计报表 500** — PostgreSQL NUMERIC vs Rust f64 类型不匹配
## 模块健康度
| 模块 | 评级 | 核心问题 |
|------|------|---------|
| 用户/权限 | 🟢 | 基本可用email 验证偏松 |
| 组织架构 | 🔴 | 级联删除全部缺失 |
| 工作流 | 🔴 | 大量功能未实现ServiceTask/claim/deprecate/timeout |
| 消息 | 🟡 | 无实时推送,模板/偏好功能半成品 |
| 患者管理 | 🟢 | 基本可用,细节问题 |
| 预约排班 | 🟢 | 正常 |
| 随访咨询 | 🟡 | 患者 UUID 显示 |
| 积分文章 | 🟢 | 正常 |
| 统计报表 | 🔴 | 500 错误 |
| 插件系统 | 🟡 | SQL 注入需修,其他防护好 |
| 系统设置 | 🟢 | 基本可用 |
| **小程序** | 🟡 | .env 安全风险,加密密钥弱 |
## 下一步
1. **修复 9 个 P0**(预计 3-5 天)— 安全和数据完整性
2. **修复高优 P1**(预计 1 周)— 统计报表/实时推送/加密密钥
3. **补全工作流和消息模块**(预计 2-3 周)— 功能闭环
4. **小程序安全加固**(预计 3 天)— .gitignore/密钥/urlCheck
5. **提升前端测试覆盖率**(持续)
## 报告文件
- 详细报告: `plans/audit-report-2026-04-26.md`
- 本摘要: `plans/audit-summary-2026-04-26.md`