2026-07-31 09:54:17 +08:00
|
|
|
|
# 全项目代码审计报告
|
|
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
审计日期:2026-08-03
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
审计范围:`apps/*`、`frontend/*`、`backend/{api,worker,iot-gateway,iot-server}`
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
依据:`checking/*`、`docs/01`~`docs/12`、仓库实现与测试结果
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 1. 发布结论
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
当前版本**不满足生产发布条件**。本轮确认并修复 4 类高风险实现问题,但设备绑定/安全整改等核心业务尚未形成可执行闭环,远程 PostgreSQL/Redis 集成、真实支付沙箱、MQTT Broker 级联调和灾备恢复尚无本轮证据。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
风险统计(未修复项):P0 2 项、P1 6 项、P2 4 项。代码修复不等于对应跨端流程已验收。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 2. 本轮已修复
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
| 编号 | 等级 | 问题 | 修复与验证 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| FIX-02 | P0 | 通用迁移会直接删除旧支付/退款表,破坏资金及审计事实 | 改为检测旧表并中止迁移,要求专用保留迁移;新增 sqlmock 回归测试。 |
|
|
|
|
|
|
| FIX-03 | P1 | 支付回调可能在目标业务记录不存在时仍把支付单标记成功 | 业务状态推进强制恰好更新一行;补充 0 行、1 行和数据库错误测试;重复回调校验渠道流水号。 |
|
|
|
|
|
|
| FIX-04 | P1 | IoT Server 信任帧内设备号,可利用他人 Topic 伪造 ACK | 设备身份取自已认证 Topic;帧内设备号不一致时不转发解码 ACK;补充 Topic 单元测试。 |
|
|
|
|
|
|
| FIX-05 | P2 | Worker/IoT Server 使用无明确超时的 HTTP 客户端;内部令牌普通比较 | 增加 12/15 秒超时;支付 Worker 令牌改为常量时间比较。 |
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 3. 未修复发布阻断项
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
### P0
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
1. **核心设备安全闭环未实现。** 当前 API 只有内部 IoT 命令、Outbox 和设备消息路由,没有面向用户的设备绑定/归属鉴权、远控动作、高风险开阀拦截、安全事件、整改和复检闭环。AC-01~AC-06、AC-12、AC-15、AC-22 不能验收。
|
|
|
|
|
|
2. **真实远程依赖及资金链路无本轮证据。** API 已按要求恢复 YAML 中的远程 PostgreSQL/Redis 配置,但本轮没有执行远程数据库事务、Redis 并发/TTL、支付宝/微信沙箱回调及退款对账。BF-05~BF-07、BF-11 不能作为通过。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
### P1
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
1. IoT ACK 仅按 `device_id + uint16 packet_number + 活跃状态` 批量更新;包号重启后可复用,且没有约束同设备同包号仅一个活跃命令,存在误确认风险。
|
|
|
|
|
|
2. Worker 没有自动化测试,关单扫描、Outbox 重试、双 Worker 认领、进程重启和坏响应均无回归保护。
|
|
|
|
|
|
3. 微信回调依赖 SDK 验签解密,但业务代码未显式比对回调商户号、appid 和币种与本地配置/支付单一致。
|
|
|
|
|
|
4. IoT Server TLS、设备认证和 Topic ACL 未以生产模式启动门禁强制;Broker 级伪造、越权订阅和断线重连未验证。
|
|
|
|
|
|
5. 服务人员准入、离线补传强制字段、安装/维修/安检完成条件尚无完整服务端闭环证据。
|
|
|
|
|
|
6. PostgreSQL 全量加 WAL 恢复、Redis 故障恢复及实际 RPO/RTO 未演练。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
### P2
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
1. 支付创建采用“先查询再插入”,并发相同幂等请求可能向渠道重复建单后在本地唯一键失败;需数据库预留事实或冲突回读设计。
|
|
|
|
|
|
2. IoT Outbox 没有明确死信上限和人工恢复状态;持续失败会无限重试。
|
|
|
|
|
|
3. 三套管理端 lint 仍有约百条告警,规则目前不会阻断质量门禁。
|
|
|
|
|
|
4. Flutter 工具在本机启动超时,两个 App 的 analyze/test 未得到本轮结果。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 4. 模块审计结论
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
| 模块 | 结论 | 主要证据/缺口 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| API | 有条件通过静态门禁 | 测试、vet、build 通过;支付新增回归通过;核心设备/安全/服务闭环缺失。 |
|
|
|
|
|
|
| Worker | 构建通过、业务门禁不通过 | test/vet/build 通过,但无测试文件,远程依赖与故障恢复未执行。 |
|
|
|
|
|
|
| IoT Gateway | 局部门禁通过 | test/vet/build 通过;缺真实 Gateway→IoT Server 故障注入。 |
|
|
|
|
|
|
| IoT Server | 局部门禁通过 | 协议及 Topic 测试、vet、build 通过;缺 Broker ACL/TLS/真设备验证。 |
|
|
|
|
|
|
| platform_admin | 构建通过 | type、contract、build 通过;lint 111 warnings/12 infos。 |
|
|
|
|
|
|
| gas_admin / delivery_admin | 构建通过 | type、lint、build 命令通过;lint 仍有大量非阻断告警。 |
|
|
|
|
|
|
| site | 通过本地站点门禁 | 先 build 后执行 4 个托管路由/打包测试,全部通过。 |
|
|
|
|
|
|
| user_app / service_app | 未验证 | Flutter 命令超时;不能沿用历史结果。 |
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 5. 敏感配置与迁移要求
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
- API 按当前项目约定从 YAML 读取远程连接;该文件含敏感配置,应限制仓库和主机访问,并检查 Git 历史、CI 日志及共享记录。
|
|
|
|
|
|
- 报告、命令输出和日志不得记录远程连接值。
|
|
|
|
|
|
- 旧资金表迁移需单独方案,至少包含数据盘点、不可变备份、字段映射、对账、回滚和审计批准。
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
## 6. 建议修复顺序
|
2026-07-31 09:54:17 +08:00
|
|
|
|
|
2026-08-03 16:03:44 +08:00
|
|
|
|
1. 确认 YAML 中的远程凭据仅指向隔离测试环境,并限制文件访问权限。
|
|
|
|
|
|
2. 实现设备绑定、归属鉴权、安全事件、自动关阀、整改复检和开阀拦截。
|
|
|
|
|
|
3. 为 ACK 增加持久化包号分配/命令相关标识及唯一活跃约束。
|
|
|
|
|
|
4. 补齐 Worker、支付并发、Broker ACL/TLS 和跨进程故障恢复测试。
|
|
|
|
|
|
5. 完成 BF-01~BF-15 的远程集成、真浏览器/Flutter E2E、支付沙箱和灾备演练后再评估发布。
|