# Phase 2c 逐行走读 — `server/infrastructure/`（完成）

**标准**: `docs/project/line-walk-audit-standard.md`  
**日期**: 2026-05-22  
**范围**: 21 个 Python 文件，3 批走读

---

## 走读签字

| 项 | 值 |
|----|-----|
| 计划文件数 | 21 |
| 完成文件数 | 21 |
| 新增 FINDING | 2（批次 2–3） |
| 已修复复核 | F2c-01/02/04 → **FIXED**（见 security-fixes changelog） |

---

## 文件清单（21/21）

| 文件 | N | 状态 |
|------|---|------|
| `ssh/asyncssh_pool.py` | 290 | ✓ |
| `database/crypto.py` | 83 | ✓ |
| `database/session.py` | 117 | ✓ |
| `redis/client.py` | 87 | ✓ |
| `telegram/__init__.py` | 112 | ✓ |
| `database/migrations.py` | 123 | ✓ |
| `database/server_repo.py` | 99 | ✓ |
| `database/admin_repo.py` | 58 | ✓ |
| `database/ssh_session_repo.py` | 86 | ✓ |
| `database/audit_log_repo.py` | 41 | ✓ |
| `database/sync_log_repo.py` | 40 | ✓ |
| `database/script_repo.py` | 71 | ✓ |
| `database/setting_repo.py` | 33 | ✓ |
| `database/push_schedule_repo.py` | 96 | ✓ |
| `database/db_credential_repo.py` | 34 | ✓ |
| `database/platform_node_repo.py` | 87 | ✓ |
| `database/password_preset_repo.py` | 34 | ✓ |
| `database/__init__.py` | 1 | ✓ 零命中 |
| `__init__.py` | 15 | ✓ |
| `ssh/__init__.py` | 1 | ✓ 零命中 |
| `redis/__init__.py` | 1 | ✓ 零命中 |
| `agent_url.py` | 11 | ✓（批次 1 后增） |

---

## Findings — 全目录

| ID | 文件:行 | 类 | 度 | 描述 | 状态 |
|----|---------|----|----|------|------|
| F2c-01 | `crypto.py:75-83` | BUG | P1 | 解密失败返回密文 | **FIXED** |
| F2c-02 | `asyncssh_pool.py:167-168` | RISK | P1 | 严格主机校验可关闭 | **FIXED**（新装默认 true） |
| F2c-04 | `telegram/__init__.py:69-71` | RISK | P2 | HTML 未转义 | **FIXED** |
| F2c-05 | `migrations.py:97-99` | RISK | P2 | 数据迁移失败仅 log，启动继续，可能半迁移 | 待观察 |
| F2c-06 | `push_schedule_repo.py:91-93` | RISK | P2 | `update_status(**kwargs)` setattr 任意列名；当前仅内部调用 | 低 |

**repo 层（11 文件）**: 均 SQLAlchemy `select/where`，无用户拼接 SQL → **规则零漏洞命中**（逐文件 Read 完成）。

---

## Closure 摘要 — 批次 2–3

### `database/migrations.py`

| 行号 | 规则 | 判定 | 理由 |
|------|------|------|------|
| 118 | PY-04 | SAFE | `text(sql)` 来自常量列表 |
| 97-99 | PY-09 | FINDING | P2 F2c-05 吞异常 |

### `database/server_repo.py` 等 11 个 repo

| 规则 | 判定 | 理由 |
|------|------|------|
| PY-04 | SAFE | ORM 参数化；`category` 为绑定变量 |

### `__init__.py` ×4

| 判定 | 理由 |
|------|------|
| 规则零命中 | 仅 docstring / lazy import |

---

## 数据流（基础设施）

```
Agent/SSH ──► asyncssh_pool ──► decrypt_value (crypto)
心跳 ──► Redis ──► heartbeat_flush ──► MySQL servers
告警 ──► telegram / websocket pubsub
配置 ──► session.py engine ──►各 repo
```

---

## 下一批

**Phase 2d**: `server/main.py`、`config.py`、`server/background/*.py`
