# API 全量巡检 — 总 Closure

**日期**: 2026-06-06  
**计划**: B1→B6 按 8 维清单（认证/越权/注入/路径/凭据/输入/错误/审计）  
**策略**: 审计 + 当场修复（用户确认）

## 批次索引

| 批 | 模块 | 报告 | P0 | P1 | P2 已修 |
|----|------|------|----|----|---------|
| B1 | servers + webssh | [b1](2026-06-06-api-audit-b1-servers-webssh.md) | 0 | 0 | 1 |
| B2 | sync + files | [b2](2026-06-06-api-audit-b2-sync-files.md) | 0 | 0 | 1 |
| B3 | auth | [b3](2026-06-06-api-audit-b3-auth.md) | 0 | 0 | 0 |
| B4 | scripts + terminal | [b4](2026-06-06-api-audit-b4-scripts-terminal.md) | 0 | 0 | 1 |
| B5 | settings + search + assets | [b5](2026-06-06-api-audit-b5-settings-search-assets.md) | 0 | 0 | 0 |
| B6 | agent + install + ws + health | [b6](2026-06-06-api-audit-b6-agent-install-ws-health.md) | 0 | 0 | 0 |

## 修复汇总

| ID | 问题 | 修复 |
|----|------|------|
| P2-01 | `ServerCheck.server_ids` 无上限 | `max_length=50` |
| P2-02 | `SyncFiles`/`SyncVerify.server_ids` 无上限 | `max_length=2000` |
| P2-03 | `ScriptExecute.server_ids` 无上限 | `max_length=2000` |
| H-03 | pending retry 失败/删除审计不完整 | 补 audit + detail |

## 已接受 H（不阻断）

- WebSSH 遗留 token 无 `tv` 宽限 5s
- `install-agent` 回落全局 `API_KEY`（仅 SSH 下发，不返前端）
- `_audit_sync` 写失败仅日志
- `check_dangerous_command` 警告不阻断执行

## 验证

```bash
.venv/bin/pytest tests/test_security_unit.py tests/test_auth_refresh_reuse.py tests/test_credential_poller.py -q
```

## Changelog

- `docs/changelog/2026-06-06-api-audit-b1-servers-webssh.md`
- `docs/changelog/2026-06-06-api-audit-b2-sync-files.md`
