77 lines
2.8 KiB
Markdown
77 lines
2.8 KiB
Markdown
|
|
# 审计记录 — servers.html 系统版本拆分 + 空字段隐藏
|
|||
|
|
|
|||
|
|
## 审计信息
|
|||
|
|
|
|||
|
|
- **日期**: 2026-05-27
|
|||
|
|
- **审计人**: Claude (AI)
|
|||
|
|
- **触发原因**: UX改进 — 系统版本拆为发行版+内核平台,空字段隐藏不显示--
|
|||
|
|
|
|||
|
|
## 审计范围
|
|||
|
|
|
|||
|
|
| 文件 | 行数 | 状态 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| web/app/servers.html | ~750 | ☑ 已审 |
|
|||
|
|
|
|||
|
|
## 审计8步结果
|
|||
|
|
|
|||
|
|
### Step 1: 登记 ✅
|
|||
|
|
改动:1) 系统版本拆为「发行版」(siOSRelease) + 「内核平台」(siPlatform) 两卡片;2) 描述/目标路径/认证方式空值时隐藏整行
|
|||
|
|
|
|||
|
|
### Step 2: 全文Read ✅
|
|||
|
|
全文读取 servers.html,确认所有改动点
|
|||
|
|
|
|||
|
|
### Step 3: 规则扫描H
|
|||
|
|
- H1: `sys.os_release` / `sys.platform` — API返回的只读字符串,用 `textContent` 赋值,不经过 `innerHTML` — ✅ 无XSS
|
|||
|
|
- H2: `s.description` / `s.target_path` / `s.auth_method` — 同上,`textContent` 赋值 — ✅ 无XSS
|
|||
|
|
- H3: `style.display` 控制行显隐 — DOM属性操作,非用户输入 — ✅ 无注入
|
|||
|
|
- H4: `<code id="siTarget">` — 使用语义标签包裹路径,textContent赋值 — ✅ 安全
|
|||
|
|
- H5: grid从4列变5卡片,`lg:grid-cols-4` 自动换行 — ✅ 布局安全
|
|||
|
|
- H6: `flex-wrap gap-x-6 gap-y-2` 替代 `grid-cols-3` — 空值隐藏后自动重排 — ✅ 布局正确
|
|||
|
|
|
|||
|
|
### Step 4: Closure表
|
|||
|
|
| H | 判定 | 依据 |
|
|||
|
|
|---|------|------|
|
|||
|
|
| H1 | ✅ PASS | textContent不解析HTML,XSS不可能 |
|
|||
|
|
| H2 | ✅ PASS | 同H1 |
|
|||
|
|
| H3 | ✅ PASS | style.display值固定为空或none |
|
|||
|
|
| H4 | ✅ PASS | code标签+textContent,安全 |
|
|||
|
|
| H5 | ✅ PASS | 纯CSS布局,无安全影响 |
|
|||
|
|
| H6 | ✅ PASS | flex-wrap自动适配,无安全问题 |
|
|||
|
|
|
|||
|
|
### Step 5: 入口表
|
|||
|
|
| 入口 | 类型 | 来源 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| sysInfoGrid 显示 | DOM渲染 | API返回的system_info JSON |
|
|||
|
|
| sysInfoMeta 显隐 | DOM渲染 | API返回的server字段 |
|
|||
|
|
|
|||
|
|
### Step 6: 输入→Sink
|
|||
|
|
- `sys.os_release` → `textContent` → DOM文本节点 — ✅ 安全(不经过innerHTML)
|
|||
|
|
- `sys.platform` → `textContent` → DOM文本节点 — ✅ 安全
|
|||
|
|
- `s.description` → `textContent` → DOM文本节点 — ✅ 安全
|
|||
|
|
- `s.target_path` → `textContent` → DOM文本节点(code标签)— ✅ 安全
|
|||
|
|
- `s.auth_method` → 条件判断 → `textContent` → DOM文本节点 — ✅ 安全
|
|||
|
|
|
|||
|
|
### Step 7: 归类
|
|||
|
|
```
|
|||
|
|
web/app/servers.html 750行 6H 0FINDING
|
|||
|
|
────────────────────────────────────────
|
|||
|
|
总计 6H 0FINDING
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 8: DoD ✅
|
|||
|
|
- ❌ 明文密码/密钥暴露? — 否
|
|||
|
|
- ❌ 命令注入? — 否
|
|||
|
|
- ❌ SQL注入? — 否(纯前端)
|
|||
|
|
- ❌ XSS? — 否(全部textContent)
|
|||
|
|
- ❌ 静默吞错? — 否
|
|||
|
|
- ❌ 硬编码? — 否
|
|||
|
|
- ✅ 所有FINDING已修复? — 0 FINDING
|
|||
|
|
|
|||
|
|
## FINDING 列表
|
|||
|
|
|
|||
|
|
无
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
|
|||
|
|
☑ 审计通过,0 FINDING,可部署
|