Files
Nexus/docs/audit/2026-05-31-terminal-iteration.md
2026-07-08 22:31:31 +08:00

3.9 KiB
Raw Permalink Blame History

审计记录:TerminalPage全面迭代 + 快捷命令MySQL持久化

审计信息

  • 日期: 2026-05-31
  • 审计人: Claude (AI) + 用户确认
  • 触发原因: TerminalPage 25项问题修复 + 快捷命令MySQL持久化 + Shell语法高亮

审计范围

文件 行数 状态
server/domain/models/__init__.py 431→447 ☑ 已审
server/api/terminal.py 0→168 ☑ 已审 (新建)
server/main.py 2行新增 ☑ 已审
frontend/src/pages/TerminalPage.vue 976→540 ☑ 已审 (完全重写)
frontend/src/pages/LoginPage.vue 居中+删Logo ☑ 已审

审计8步结果

Step 1: 登记

commit facc1e8: feat: TerminalPage全面迭代 + 快捷命令MySQL持久化

Step 2: 全文Read

所有5个文件逐行审读完毕

Step 3: 规则扫描H

H# 规则 文件 说明
H1 硬编码密钥 terminal.py - 无命中
H2 f-string拼SQL terminal.py - 无命中,全用SQLAlchemy ORM
H3 静默吞错 terminal.py - 无空catch
H4 未验证输入拼shell terminal.vue - 无shell拼装
H5 明文密码前端 terminal.vue - 无密码字段
H6 XSS terminal.vue highlightedCmd v-html用于Shell高亮,tokenizeShell已转义HTML实体(& < >)
H7 JWT保护 terminal.py 全部 所有4个端点都有Depends(get_current_admin)
H8 审计日志 terminal.py CUD操作 POST/PUT/DELETE都有AuditLog记录

Step 4: Closure表

H# 判定 依据
H6 安全 tokenizeShell()函数对每个token值调用.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')做HTML转义,用户输入不会注入HTML。关键字列表为硬编码Set,不接受外部输入
H7 安全 4个路由全部使用Depends(get_current_admin)JWT验证由JwtAuthMiddleware保障
H8 安全 create/update/delete均写AuditLog,包含admin_username、action、target_type、target_id、detail、ip_address
H1-H5 无命中 代码无相关反模式

Step 5: 入口表

入口 方法 认证 输入
/api/terminal/quick-commands GET JWT
/api/terminal/quick-commands POST JWT name(str≤100), cmd(str≤500)
/api/terminal/quick-commands/{id} PUT JWT name?, cmd? (可选)
/api/terminal/quick-commands/{id} DELETE JWT id(int)

Step 6: 输入→Sink

  • name/cmd (POST/PUT): Pydantic Field验证(min_length=1, max_length=100/500) → SQLAlchemy ORM参数化写入 → 安全
  • id (PUT/DELETE): int类型,FastAPI自动校验 → SQLAlchemy ORM参数化查询 → 安全
  • is_builtin保护: PUT/DELETE均检查qc.is_builtin,若为True则返回403 → 安全
  • 前端v-html: highlightedCmd computed属性 → tokenizeShell() → 每token HTML转义 → 安全

Step 7: 归类

server/domain/models/__init__.py  16行新增  0H  0FINDING
server/api/terminal.py            168行     0H  0FINDING
server/main.py                    2行新增   0H  0FINDING
frontend/src/pages/TerminalPage.vue  540行  1H  0FINDING
frontend/src/pages/LoginPage.vue     5行    0H  0FINDING
───────────────────────────────────────────────────────
总计                                1H   0FINDING

Step 8: DoD

  • 所有CUD操作有审计日志
  • 所有API端点有JWT保护
  • 无硬编码密钥
  • 无f-string拼SQL
  • 无静默吞错(前端空catch仅用于尺寸为0等已知无害场景)
  • XSS防护:v-html内容经HTML转义
  • 内置命令不可删除/编辑(is_builtin检查 + 403
  • Pydantic输入验证(长度限制)

FINDING 列表

结论

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