# Phase 1 Delta 审计 — Wave D5（前端 Files / Terminal）

**日期**: 2026-06-04  
**范围**: files/terminal composables（Code Review 后 delta）  
**标准**: `standards/line-walk-audit-standard-v2.md` 8 步

## 登记

| # | 文件 | 语言 | 行数 N | Read 范围 |
|---|------|------|--------|-----------|
| 1 | `frontend/src/composables/files/useFilesActions.ts` | TS | 609 | 1–609 全文 |
| 2 | `frontend/src/composables/files/useFilesEditor.ts` | TS | 163 | 1–163 全文 |
| 3 | `frontend/src/composables/files/useFilesPermissions.ts` | TS | 101 | 1–101 全文 |
| 4 | `frontend/src/composables/terminal/useTerminalSessions.ts` | TS | 749 | 1–749 全文 |
| 5 | `frontend/src/composables/terminal/useTerminalCmdBar.ts` | TS | 108 | 1–108 全文 |

**关联**: `types.ts` 中 `sanitizeRemotePath`（40–43）已纳入 terminal 路径 H 判定。

## Step 3 — 规则扫描 H（摘要）

| 文件 | H 命中 |
|------|--------|
| useFilesActions.ts | H-Auth, H-Path, H-Delete, H-Upload |
| useFilesEditor.ts | H-Auth, H-Size |
| useFilesPermissions.ts | H-Auth, H-Sudo |
| useTerminalSessions.ts | H-Auth, H-WS, H-Path, H-Cmd |
| useTerminalCmdBar.ts | H-Storage, H-Cmd |

## 入口表（前端 → API / WS）

| 调用方 | 方法 | 路径 | 鉴权 |
|--------|------|------|------|
| useFilesActions | POST | `/sync/file-ops`, `/sync/write-file`, `/sync/chmod`, `/sync/compress`, `/sync/decompress`, `/sync/upload`, `/sync/download` | http JWT |
| useFilesEditor | 经 `readRemoteFileContent` | `/sync/read-file` | http JWT |
| useFilesPermissions | GET/POST | `/servers/{id}/files-capability`, `setup-files-sudo` | http JWT |
| useTerminalSessions | POST | `/auth/webssh-token` | http JWT |
| useTerminalSessions | WS | `/ws/terminal/{id}?token=` | purpose=webssh JWT |
| useTerminalCmdBar | WS DATA | 经 `sendWsData` | 同上 |

## Closure 表

| H | 文件:行号 | 判定 | 理由 |
|---|-----------|------|------|
| H-Auth | useFilesActions.ts:255-494 | SAFE | 全部经 `@/api` JWT |
| H-Path | useFilesActions.ts:297-301,461-464 | SAFE | `validatePathSegment` 拦截 `/` `..` |
| H-Path | useFilesActions.ts:340-347 | RISK | rename 未调 validatePathSegment；后端 sync_v2 校验 |
| H-Path | useFilesActions.ts:71-78,119 | SAFE | `normalizeRemotePath` / `joinRemotePath` |
| H-Delete | useFilesActions.ts:393-414 | SAFE | confirm + 逐条 delete；失败计数 |
| H-Upload | useFilesActions.ts:486-494 | SAFE | server_id + remote_path 参数化 POST |
| H-Auth | useFilesEditor.ts:94-98 | SAFE | readRemoteFileContent + server_id |
| H-Size | useFilesEditor.ts:63-70 | SAFE | 2MB 编辑上限 `FILE_EDITOR_MAX_BYTES` |
| H-Auth | useFilesPermissions.ts:65-78 | SAFE | JWT GET/POST |
| H-Sudo | useFilesPermissions.ts:73-91 | SAFE | 一键 sudo 走后端 re-auth+SSH；无密码回传 |
| H-Storage | useFilesPermissions.ts:56 | SAFE | sessionStorage 仅 hint dismissed 标记 |
| H-Auth | useTerminalSessions.ts:279-281 | SAFE | webssh-token 绑定 server_id |
| H-WS | useTerminalSessions.ts:293-294 | RISK | query token；单人运维已接受 |
| H-WS | useTerminalSessions.ts:350-363 | SAFE | 4001/4003 分支处理 |
| H-Path | useTerminalSessions.ts:159-163,513,578 | RISK | `sanitizeRemotePath` 未拦 `;|&$`；cd 字符串拼接；管理员会话 |
| H-Cmd | useTerminalSessions.ts:648-655 | SAFE | 快捷命令来自 API/内置白名单 |
| H-Cmd | useTerminalCmdBar.ts:21-34 | SAFE | 命令经 WS DATA；后端 dangerous check |
| H-Storage | useTerminalCmdBar.ts:7-33 | RISK | localStorage 存命令历史（非密码）；UX 便利 |
| H-Secret | 五文件 | SAFE | 无 password/api_key 存 localStorage |

**len(H)=18, Closure=18**

## FINDING

无 P0/P1 新 FINDING。

可选后续（P2/UX）：rename 前端补 `validatePathSegment`；`sanitizeRemotePath` 收紧或 cd 改用引号包裹。

## DoD

- [x] len(H) == Closure
- [x] 五文件全文 Read（大文件分段至 EOF）
- [x] 无 v-html / 凭据明文存储

## 验证

`bash scripts/local_verify.sh` — 全绿
