3.1 KiB
3.1 KiB
Phase 1 Delta 审计 — Wave D4(前端 Push)
日期: 2026-06-04
范围: Code Review 后 push 页 composables + 组件
标准: standards/line-walk-audit-standard-v2.md 8 步
登记
| # | 文件 | 语言 | 行数 N | Read 范围 |
|---|---|---|---|---|
| 1 | frontend/src/composables/push/usePushForm.ts |
TS | 101 | 1–101 全文 |
| 2 | frontend/src/composables/push/usePushPreview.ts |
TS | 104 | 1–104 全文 |
| 3 | frontend/src/composables/push/usePushProgress.ts |
TS | 294 | 1–294 全文 |
| 4 | frontend/src/components/push/PushZipUpload.vue |
Vue | 51 | 1–51 全文 |
| 5 | frontend/src/components/push/PushServerGrid.vue |
Vue | 110 | 1–110 全文 |
关联(本波未单独登记): usePushPage.ts 仅编排 lifecycle,无独立 sink。
Step 3 — 规则扫描 H(摘要)
| 文件 | H 命中 |
|---|---|
| usePushForm.ts | H-Auth, H-Upload, H-Path |
| usePushPreview.ts | H-Auth, H-Path |
| usePushProgress.ts | H-Auth, H-WS, H-Batch |
| PushZipUpload.vue | H-Upload, H-XSS |
| PushServerGrid.vue | H-XSS |
入口表(前端 → API)
| 调用方 | 方法 | 路径 | 鉴权 |
|---|---|---|---|
| usePushForm | POST multipart | /sync/upload-zip |
http JWT |
| usePushPreview | POST | /sync/preview |
http JWT |
| usePushProgress | POST | /sync/files, /sync/cancel |
http JWT |
| usePushProgress | WS | /ws/sync?token= |
JWT query(已接受 RISK) |
Closure 表
| H | 文件:行号 | 判定 | 理由 |
|---|---|---|---|
| H-Auth | usePushForm.ts:65-67 | SAFE | 经 @/api http,Bearer JWT |
| H-Upload | usePushForm.ts:52,57 | RISK | 客户端仅 .zip 后缀;服务端 ZIP slip/大小限制(D1) |
| H-Path | usePushForm.ts:69-72 | SAFE | source_path 来自服务端 upload-zip 响应 |
| H-Path | usePushForm.ts:38-40 | SAFE | target_path 必填;远程校验在 sync_v2 |
| H-Auth | usePushPreview.ts:28-38 | SAFE | preview POST JWT + server_id 参数化 |
| H-Concurrency | usePushPreview.ts:72-77 | SAFE | PREVIEW_CONCURRENCY=4 限流 |
| H-Auth | usePushProgress.ts:237-243 | SAFE | push POST JWT + batch_id |
| H-WS | usePushProgress.ts:137-142 | RISK | query token;单人运维已接受 |
| H-WS | usePushProgress.ts:79-80 | SAFE | batch_id 过滤防串批 |
| H-WS | usePushProgress.ts:165-167 | SAFE | 4401 → forceLogout |
| H-Batch | usePushProgress.ts:244-246 | SAFE | 服务端 batch_id 可覆盖客户端 |
| H-Cancel | usePushProgress.ts:194-209 | SAFE | cancel 带 batch_id |
| H-Timer | usePushProgress.ts:261-275 | SAFE | 300s 安全超时 + dispose 清理 |
| H-Secret | usePushForm/Preview/Progress | SAFE | 无 localStorage 密码/密钥 |
| H-XSS | PushZipUpload.vue:22 | SAFE | {{ uploadedZip.name }} 文本插值 |
| H-XSS | PushServerGrid.vue:66-77 | SAFE | 无 v-html;状态 chip 文本插值 |
| H-Upload | PushZipUpload.vue:18 | SAFE | accept=".zip" + 父 composable 后缀检查 |
len(H)=17, Closure=17
FINDING
无 P0/P1 新 FINDING。
DoD
- len(H) == Closure
- 五文件全文 Read
- 无 v-html / localStorage 凭据
验证
bash scripts/local_verify.sh — 全绿