# 审计记录:全站 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,可部署