Files
Nexus/docs/reports/step-0-infrastructure/ecc-security-report.md
T
Your Name c9a99f4fb3 fix: 全项目文档对齐 + 代码清理
代码修复:
- 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>
2026-05-22 08:19:56 +08:00

3.1 KiB
Raw Blame History

ECC组 全链路安全审查报告

日期: 2026-05-212026-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.pyallow_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()已替换,其余项目通过审查。