# ECC组 全链路安全审查报告

> 日期: 2026-05-21（2026-05-22 勘误更新）
> 部门: ECC组
> 负责人: CTO
> 审查范围: R7 Redis安全 + D9 Schema安全 + A4 认证安全 + W6 SSH安全 + EC1-EC5 编码规范

---

## 审查结果

| 编号 | 审查项 | 严重程度 | 发现 | 状态 |
|------|--------|---------|------|------|
| **R7** | Redis连接安全 | 🟡 中 | REDIS_URL含密码但无TLS；生产环境应启用`rediss://` | 建议改进 |
| **R7** | Redis连接池 | ✅ | BlockingConnectionPool + health_check + timeout + retry 配置合理 | 通过 |
| **R7** | Redis启动校验 | ✅ | ADR-009 启动强校验，不可用直接退出 | 通过 |
| **D9** | Schema变更 | ✅ | 新表均有外键约束+级联删除；索引合理 | 通过 |
| **D9** | 敏感字段 | ✅ | password仍用加密存储；jwt_refresh_token为随机token | 通过 |
| **D9** | 迁移安全 | ✅ | category字段保留兼容；新增字段nullable | 通过 |
| **A4** | JWT认证 | ✅ | HS256 + SECRET_KEY签名；exp过期校验；is_active检查 | 通过 |
| **A4** | JWT公开路由 | 🟡 中 | `/api/agent/` 使用API Key而非JWT，需确认Agent请求带X-API-Key | 需验证 |
| **A4** | CORS配置 | ~~🔴 高~~ ✅已修复 | `allow_origins=["*"]` → 改为 `settings.CORS_ORIGINS.split(",")` 从 `NEXUS_CORS_ORIGINS` 环境变量读取 | ✅**已修复** |
| **A4** | JWT算法锁定 | ✅ | `algorithms=["HS256"]` 硬编码，不允许算法混淆攻击 | 通过 |
| **W6** | SSH连接注入 | ✅ | asyncssh参数化连接，无shell注入风险 | 通过 |
| **W6** | 会话隔离 | ✅ | 每个WebSocket连接独立SSH进程，UUID session_id | 通过 |
| **W6** | 命令日志 | ✅ | 按行记录命令，便于审计 | 通过 |
| **W6** | WebSocket认证 | ✅ | JWT查询参数认证(ADR-011)，无效token关闭连接 | 通过 |
| **EC1** | Redis密码 | 🟡 中 | 开发环境无密码可接受，生产需设置requirepass | 部署时配置 |
| **EC2** | JWT审计 | ✅ | login/logout/TOTP操作均有AuditLog记录 | 通过 |
| **EC3** | WS/SSH安全 | ✅ | 连接超时+心跳检测+僵尸清理 | 通过 |
| **EC4** | 前端XSS | ✅ | 所有动态内容通过`esc()`函数转义后再写入DOM | 通过 |
| **EC4** | 前端CSRF | ✅ | JWT Bearer token不受CSRF攻击 | 通过 |
| **EC5** | 编码规范 | ✅已修复 | `datetime.utcnow()` 已全部替换为 `datetime.now(timezone.utc)` | ✅**已修复** |

---

## 需修复项

### ~~🔴 P0: CORS配置（A4相关）~~ ✅已修复

**问题：** `main.py` 中 `allow_origins=["*"]` + `allow_credentials=True` 同时存在，浏览器会拒绝此组合。

**修复：** 已改为 `allow_origins=settings.CORS_ORIGINS.split(",")` 从 `NEXUS_CORS_ORIGINS` 环境变量读取白名单。

**修复：** 限制 origins 为实际域名。

### ~~🟡 P1: datetime.utcnow() 弃用（EC5）~~ ✅已修复

**问题：** Python 3.12 弃用 `datetime.utcnow()`，项目29处使用。

**修复：** server/ 目录全部模型 + web/agent/agent.py 已替换为 `datetime.now(timezone.utc)`。

---

## 审查结论

**通过** — CORS配置已修复，datetime.utcnow()已替换，其余项目通过审查。

