# Nexus 代码问题修复计划

> **提交部门**: 管理组
> **部门负责人**: 项目经理
> **报告日期**: 2026-05-20
> **状态**: 待审查 ⏳

---

## 1. 问题总览与优先级

| 优先级 | 数量 | 说明 |
|--------|------|------|
| **P0 — 已登记待改** | 3 项 | 原代码审查遗留，project/status.md 已标记 |
| **P1 — 安全中危** | 5 项 | 新发现的安全问题，涉及密钥/注入/泄露 |
| **P2 — 代码质量** | 5 项 | 硬编码、日志规范、路径兼容性等 |

---

## 2. 人员分工与技能安排

### 2.1 工程部 — 代码修复执行

| 人员/技能 | 分配任务 | 预估工时 |
|-----------|---------|---------|
| **PHP 开发者** | ① `api_proxy.php` 冗余认证注释清理<br>② `files.php` `fm.uploadRaw` 死代码删除<br>③ `install.php` SQL注入防护 | 1.5h |
| **Python 开发者** | ④ `health_checker.py`+`ssh_direct.py` 批量 COMMIT 重构<br>⑤ `retry_engine*.py` 三合一清理（确定在用版本，删除死代码）<br>⑥ `config.py` 默认密钥加固 | 2h |
| **安全工程师** | ⑦ `db.php:48` 密码返回脱敏方案设计<br>⑧ 全库 `@` 抑制符/空catch审计整改 | 1h |
| **Senior Developer** | ⑨ `tinyfm.php` 解压异常 `$res=true` 修复<br>⑩ 代码审查 + PR 质量把关 | 1h |

### 2.2 测试部 — 修复验证

| 人员/技能 | 分配任务 | 预估工时 |
|-----------|---------|---------|
| **Verify** | 验证每个修复是否到位，逐项确认关闭 | 1h |
| **安全测试** | 回归验证安全类修复（6a/6e/6g/6i） | 0.5h |
| **测试结果分析师** | 输出最终验证报告 | 0.5h |
| **现实检验者** | 检查实际运行效果，确认无回归 | 0.5h |

### 2.3 管理组 — 决策与监督

| 人员/技能 | 职责 |
|-----------|------|
| **项目经理** | 审批计划、验收决策、资源协调 |
| **测试部**（整体） | 修复完成后执行回归测试，出具测试报告 |

---

## 3. 详细修复方案

### P0 — 已登记待改（3项）

#### #2 `api_proxy.php:22-27` 冗余认证
- **现状**: `require auth.php` 已做认证，6行后又重复检查 `$_SESSION['logged_in']`
- **修复方案**: 添加注释说明"auth.php 已处理认证，此处为二次校验防止配置遗漏" 或 删除冗余代码
- **负责**: PHP 开发者
- **预估**: 15min

#### #3 `files.php:208` `fm.uploadRaw` 死代码
- **现状**: 函数定义后全库零调用
- **修复方案**: 删除第208-210行
- **负责**: PHP 开发者
- **预估**: 5min

#### #6 `health_checker.py`+`ssh_direct.py` 逐COMMIT
- **现状**: 每服务器操作后单独 `db.commit()`
- **修复方案**: 收集多个更新后统一 COMMIT，减少 DB I/O
- **负责**: Python 开发者
- **预估**: 30min

### P1 — 安全中危（5项）

#### 6a `config.py:12` 默认密钥
- **现状**: `SECRET_KEY = "change-me-in-production-use-openssl-rand-hex-32"`
- **修复方案**: 启动时检测默认值则报错退出，强制用户通过环境变量设置
- **负责**: Python 开发者
- **预估**: 20min

#### 6c `retry_engine*.py` 三份重复代码
- **现状**: 3个文件几乎相同，`retry_engine_fix.py` 有语法错误（多行字符串未连接）
- **修复方案**: 确定在用版本，删除死文件，提取公共逻辑
- **负责**: Python 开发者
- **预估**: 30min

#### 6e `install.php:56-57` SQL注入
- **现状**: `$_POST['db_name']` 直接拼入 SQL
- **修复方案**: 参数化查询或严格正则过滤 `$dbName`（仅允许字母数字下划线）
- **负责**: PHP 开发者
- **预估**: 15min

#### 6g `tinyfm.php:1208-1209` 静默失败
- **现状**: 解压异常时 `$res = true`（把失败当成功）
- **修复方案**: 改为 `$res = false` + 记录错误信息
- **负责**: Senior Developer
- **预估**: 10min

#### 6i `db.php:48` 密码泄露
- **现状**: `getServers()` 返回解密后的 SSH 密码
- **修复方案**: 新增 `getServersSafe()` 方法脱敏密码字段，审计调用方按需切换
- **负责**: 安全工程师 + PHP 开发者
- **预估**: 30min

### P2 — 代码质量（5项）

| # | 问题 | 修复方案 | 负责 | 预估 |
|---|------|---------|------|------|
| 6b | `agent_installer.py` 硬编码URL | 提取为配置项 | Python 开发者 | 15min |
| 6d | `print()` 改 `logging` | 替换为 logging 模块 | Python 开发者 | 20min |
| 6f | `@` 抑制符/空catch | 添加错误日志记录 | 安全工程师 | 30min |
| 6h | `safePath()` 硬编码路径 | 提取为配置项或动态获取 | PHP 开发者 | 15min |
| 6j | Redis 硬编码连接 | 使用配置项兜底 | Python 开发者 | 10min |

---

## 4. 执行时间线

```
Phase 1 — P0 修复（~1h）
  ├─ #3 files.php uploadRaw 删除 (5min)
  ├─ #2 api_proxy.php 冗余认证 (15min)
  └─ #6 批量 COMMIT 重构 (30min)

Phase 2 — P1 安全修复（~1.5h）
  ├─ 6e install.php SQL注入 (15min)
  ├─ 6g tinyfm.php 静默失败 (10min)
  ├─ 6a config.py 密钥加固 (20min)
  ├─ 6c retry_engine 三合一 (30min)
  └─ 6i db.php 密码脱敏 (30min)

Phase 3 — P2 质量修复（~1.5h）
  ├─ 6b/6d/6j Python端清理 (45min)
  ├─ 6f 错误处理审计 (30min)
  └─ 6h safePath路径提取 (15min)

Phase 4 — 测试验证（~2h）
  ├─ 回归测试 + 安全测试
  ├─ 实际运行验证
  └─ 测试报告输出
```

---

## 5. 风险与注意事项

| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| `retry_engine*` 三合一可能误删在用文件 | 重试队列异常 | 先确认 `main.py` 中 import 路径，保留被引用的版本 |
| `db.php:48` 密码脱敏可能影响调用方 | 部分功能密码读取失败 | 逐个审计调用方：`deploy.php`、`api_proxy.php` 等 |
| `safePath()` 路径修改可能影响现有部署 | 文件路径解析异常 | 增加兼容处理，旧路径格式仍可识别 |

---

## 6. 审批

| 角色 | 意见 | 签名 | 日期 |
|------|------|------|------|
| **项目经理** | ⏳ 待审批 | — | — |

---

**下一步**: 请项目经理审查本计划，批准后按 Phase 1→4 顺序执行。
