4.0 KiB
4.0 KiB
审计记录 — 批量按钮修复 + 审计日志中文化
审计信息
- 日期: 2026-05-27
- 审计人: Claude (AI)
- 触发原因: Bug修复 — 批量安装Agent按钮检测逻辑错误 + 审计日志详情统一中文
审计范围
| 文件 | 改动 | 状态 |
|---|---|---|
| web/app/servers.html | hasAgent 从 agent_api_key_set 改为 agent_version | ☑ 已审 |
| server/api/auth.py | detail 改中文 | ☑ 已审 |
| server/api/servers.py | detail 改中文 | ☑ 已审 |
| server/api/scripts.py | detail 改中文 | ☑ 已审 |
| server/api/assets.py | detail 改中文 | ☑ 已审 |
| server/api/settings.py | detail 改中文 | ☑ 已审 |
| server/api/webssh.py | detail 改中文 | ☑ 已审 |
| server/api/sync_v2.py | detail 改中文 | ☑ 已审 |
| server/api/agent.py | detail 改中文 | ☑ 已审 |
| server/background/script_execution_flush.py | detail 改中文 | ☑ 已审 |
| web/app/audit.html | 操作/目标类型中文化映射 | ☑ 已审 |
审计8步结果
Step 1: 登记 ✅
- servers.html updateBatchBar() hasAgent 判断从 agent_api_key_set 改为 agent_version
- 10个后端文件的 AuditLog detail 字段从英文改为中文
- audit.html 新增 ACTION_NAMES / TARGET_NAMES 映射,操作列和目标列显示中文
Step 2: 全文Read ✅
逐文件读取确认所有改动点
Step 3: 规则扫描H
- H1:
hasAgent=!!s.agent_version— agent_version 由 Agent 心跳写入(agent_version: "2.0.0"),无 Agent 时为 None — ✅ 逻辑正确 - H2:
agent_api_key_set仅在详情面板的 noKey 检测中保留使用 — ✅ 该处语义正确(检测是否生成了 Key,是安装命令的前提条件) - H3: AuditLog detail 字符串改为中文 — 纯显示文本,用
textContent赋值 — ✅ 无 XSS - H4: ACTION_NAMES / TARGET_NAMES 映射 — 前端 JS 常量,无用户输入 — ✅ 安全
- H5:
esc()函数对所有审计日志字段做 HTML 转义 — ✅ 无 XSS
Step 4: Closure表
| H | 判定 | 依据 |
|---|---|---|
| H1 | ✅ PASS | agent_version 更准确反映实际安装状态 |
| H2 | ✅ PASS | agent_api_key_set 在安装命令上下文中语义正确 |
| H3 | ✅ PASS | 中文字符串不影响安全性 |
| H4 | ✅ PASS | 前端映射是静态常量 |
| H5 | ✅ PASS | esc() 函数始终生效 |
Step 5: 入口表
| 入口 | 类型 | 来源 |
|---|---|---|
| updateBatchBar 按钮 | JS逻辑 | 服务器列表 API 数据 |
| AuditLog detail | 数据库写入 | 后端 API handler |
| audit.html 渲染 | DOM渲染 | 审计日志 API 返回 |
Step 6: 输入→Sink
s.agent_version→ 条件判断 → 按钮禁用状态 — ✅ 安全(不经过 DOM)- 中文 detail 字符串 → MySQL → API →
esc()→ DOM — ✅ 安全 ACTION_NAMES[l.action]→esc()→ DOM — ✅ 安全
Step 7: 归类
web/app/servers.html ~830行 1H 0FINDING
server/api/auth.py ~310行 1H 0FINDING
server/api/servers.py ~1100行 1H 0FINDING
server/api/scripts.py ~380行 1H 0FINDING
server/api/assets.py ~230行 1H 0FINDING
server/api/settings.py ~770行 1H 0FINDING
server/api/webssh.py ~360行 1H 0FINDING
server/api/sync_v2.py ~290行 1H 0FINDING
server/api/agent.py ~330行 1H 0FINDING
server/background/script_execution_flush.py ~46行 1H 0FINDING
web/app/audit.html ~155行 1H 0FINDING
────────────────────────────────────────────────────
总计 11文件 5H 0FINDING
Step 8: DoD ✅
- ❌ 明文密码/密钥暴露? — 否
- ❌ 命令注入? — 否
- ❌ SQL注入? — 否
- ❌ XSS? — 否(全部 esc() 转义)
- ❌ 静默吞错? — 否
- ❌ 硬编码? — 否
- ✅ 所有FINDING已修复? — 0 FINDING
FINDING 列表
无
结论
☑ 审计通过,0 FINDING,可部署