# 审计记录：全站 bug 审查修复 (前端9项 + 后端5项)

## 审计信息

- **日期**: 2026-06-01
- **审计人**: Claude (AI)
- **触发原因**: 全站巡检 bug 审查

## 审计范围

| 文件 | 变更类型 | 状态 |
|------|----------|------|
| frontend/src/App.vue | 1行导入修复 | ☑ 已审 |
| frontend/src/pages/LoginPage.vue | TOTP流程+锁定倒计时 | ☑ 已审 |
| frontend/src/pages/ServersPage.vue | domain端口污染修复 | ☑ 已审 |
| frontend/src/pages/PushPage.vue | Set索引修复 | ☑ 已审 |
| frontend/src/pages/SettingsPage.vue | 类型转换修复 | ☑ 已审 |
| frontend/src/api/index.ts | 删除重复定义 | ☑ 已审 |
| frontend/src/pages/TerminalPage.vue | 路径验证正则 | ☑ 已审 |
| frontend/src/composables/useWebSocket.ts | 连接泄漏修复 | ☑ 已审 |
| server/api/websocket.py | redis.keys→scan_iter | ☑ 已审 |
| server/application/services/auth_service.py | TTL重置修复 | ☑ 已审 |
| server/api/servers.py | 并发session lock | ☑ 已审 |
| server/api/settings.py | 弃用API修复 | ☑ 已审 |

## 审计8步结果

### Step 1: 登记 ✅
commit 6183047: fix: 全站 bug 审查修复 (前端9项 + 后端5项)

### Step 2: 全文Read ✅
所有12个文件逐行审读完毕

### Step 3: 规则扫描H

| H# | 规则 | 文件 | 行 | 说明 |
|----|------|------|-----|------|
| H1 | 硬编码密钥 | 全部 | - | 无命中 |
| H2 | f-string拼SQL | 全部 | - | 无命中 |
| H3 | 静默吞错 | 全部 | - | 无新增空catch |
| H4 | 未验证输入拼shell | 全部 | - | 无命中 |
| H5 | 明文密码前端 | 全部 | - | 无命中 |
| H6 | XSS | 全部 | - | 无新增v-html |
| H7 | JWT保护 | 全部 | - | 无新增未保护端点 |
| H8 | 审计日志 | 全部 | - | 无新增CUD操作 |

### Step 4: Closure表

| H# | 判定 | 依据 |
|----|------|------|
| H1-H8 | 无命中 | 本次修复均为bug修复，未新增端点/功能/密钥/XSS风险 |

### Step 5: 入口表

无新增入口。本次修复不改变API接口。

### Step 6: 输入→Sink

- **SettingsPage 数字转换**: 正则 `/^\d+(\.\d+)?$/` 匹配纯数字字符串 → `Number(val)` → 安全（仅转数字字符串为数字）
- **TerminalPage 路径正则**: `/^[^\x00-\x1f\x7f"']+$/.test(p)` → 白名单排除控制字符和引号 → 安全
- **PushPage Set取值**: `selectedIds.value.values().next().value` → 标准 ES6 迭代器 → 安全

### Step 7: 归类

```
frontend/src/App.vue                      1行修改   0H  0FINDING
frontend/src/pages/LoginPage.vue          15行修改  0H  0FINDING
frontend/src/pages/ServersPage.vue        1行修改   0H  0FINDING
frontend/src/pages/PushPage.vue           1行修改   0H  0FINDING
frontend/src/pages/SettingsPage.vue       6行修改   0H  0FINDING
frontend/src/api/index.ts                 -4行删除  0H  0FINDING
frontend/src/pages/TerminalPage.vue       1行修改   0H  0FINDING
frontend/src/composables/useWebSocket.ts  5行修改   0H  0FINDING
server/api/websocket.py                   3行修改   0H  0FINDING
server/application/services/auth_service.py 4行修改 0H  0FINDING
server/api/servers.py                     4行新增   0H  0FINDING
server/api/settings.py                    3行修改   0H  0FINDING
──────────────────────────────────────────────────────────
总计                                      0H  0FINDING
```

### Step 8: DoD ✅

- [x] 无新增硬编码密钥
- [x] 无新增f-string拼SQL
- [x] 无新增空catch
- [x] 无新增XSS风险
- [x] 无新增未保护端点
- [x] SettingsPage 数字转换仅对纯数字字符串生效
- [x] TerminalPage 路径验证排除控制字符和引号
- [x] servers.py db_lock 使用 asyncio.Lock 正确序列化并发 commit

## FINDING 列表

无

## 结论

☑ 审计通过，0 FINDING，可部署
