c9a99f4fb3
代码修复: - web/agent/agent.py: datetime.utcnow() → datetime.now(timezone.utc) - requirements.txt: 移除 paramiko==3.5.0 (已无活跃引用) - 删除 server/infrastructure/ssh/pool.py (DEPRECATED, 无引用) 连接池三层对齐 (config.py/.env.example/session.py): - DB_POOL_SIZE 100→160, DB_MAX_OVERFLOW 100→120 - 基于 MySQL max_connections=400, install.php 公式 文档修复 (21项): - P0: 硬编码域名/IP替换为配置变量占位符 - P1: 10个过时设计文档加归档标注 (引用旧文件结构) - P2: step-3-webssh报告 paramiko引用修正 - 6份审查报告连接池参数勘误 100/100→160/120 - ECC安全报告 EC5 datetime.utcnow 标记已修复 - docs/README.md 文档索引重写 - docs/memory/mem_nexus_overview.md 移除硬编码凭证 - docs/project/tech-stack-inventory.md paramiko标记已移除 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.1 KiB
3.1 KiB
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()已替换,其余项目通过审查。