2 Commits
Author SHA1 Message Date
TanXinandTanXin 4eeb050576 release: 发布 v1.10.0 自定义命令片段库版本 (#93)
合并 `test` 的 v1.10.0 提交到 `main`。

**包含提交**
- `28c9433` feat: 添加自定义命令片段库
- `9aa2e80` release: 发布 v1.10.0 自定义命令片段库版本

**关联**
- Related to #90

> 本 PR 仅关联 #90,不自动关闭该 Issue。

**验证**
- `pnpm run typecheck` 0 错
- `pnpm test` 47/47 603/603 通过
- `pnpm run build:frontend` 成功

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-20 11:42:28 +08:00
TanXinandTanXin c9a71f9fa3 test: 完成 v1.0.5 测试覆盖阶段 1+2,修复 3 处安全缺陷并加固 worker 接缝 (#32)
## Summary
- **修复 3 个真实生产缺陷**:ssrf.ts IPv6 `[::1]` 方括号未剥离导致 SSRF 绕过、safety.ts `apk
add/del` 子命令漏覆盖、crypto.ts catch 块 `ciphertext.length` 在 null 输入时二次崩溃
- **完成 SSH 协议层阶段 1+2 测试覆盖**:新增 7 个测试文件、347 用例,覆盖 safety / ssrf /
algorithms / kex / crypto / packet / utils 核心模块,crypto.ts 与 utils.ts 达到
100% 覆盖率
- **新增 worker 接缝安全测试**:12 用例覆盖 OAuth CSRF、IDOR 越权、SSRF 接缝、cf_verified
签名伪造、跨站 WebSocket 劫持(CSWSH)五类高危边界
- **发布 v1.0.5**,更新 CHANGELOG 与 package.json 版本号
## 变更明细
| 类别 | 文件 | 用例数 | 覆盖率 |
|------|------|--------|--------|
| 安全模块 | `tests/worker/agent/safety.test.ts` | 86 | 双路径全覆盖 |
| 安全模块 | `tests/worker/agent/ssrf.test.ts` | 28 | 私有地址段全覆盖 |
| 协议层 | `tests/ssh/algorithms.test.ts` | 33 | — |
| 协议层 | `tests/ssh/kex.test.ts` | 26 | — |
| 协议层 | `tests/ssh/crypto.test.ts` | 56 | **100%** |
| 协议层 | `tests/ssh/packet.test.ts` | 49 | **96%** |
| 协议层 | `tests/ssh/utils.test.ts` | 55 | **100%** |
| 接缝安全 | `tests/worker/security.test.ts` | 12 | 5 类高危边界 |
**累计**:11 个测试文件,371 用例全部通过,耗时 <1 秒。
## 修复的 3 个缺陷详情
1. **ssrf.ts — IPv6 `[::1]` 绕过(高危)**:`validateBaseUrl` 未剥离方括号,用户可将 AI
base_url 设为 `[::1]:8080` 指向本机,绕过本机/内网拦截,可能导致 Agent 走私到内网或泄露云元数据凭据
2. **safety.ts — `apk` 子命令漏覆盖(中危)**:`needsConfirmation` 正则仅覆盖
apt/apt-get,未覆盖 Alpine 系 `apk add/del`,可静默安装/卸载系统包而无需确认
3. **crypto.ts — 异常路径二次崩溃(高危)**:catch 块读取 `ciphertext.length` 在 null
输入时自身 throw,导致 graceful degradation 失效,错误处理路径反而制造错误
## Test Plan
- [x] `pnpm test` — 11 文件 / 371 用例 / 全绿 / 919ms
- [x] 验证 ssrf.ts `[::1]` 不再绕过
- [x] 验证 safety.ts `apk add` 触发确认
- [x] 验证 crypto.ts null 输入进入 catch 返回 null 而非 throw
## Scope Note
阶段 3/4(Agent 控制循环、SSH 会话、Durable Objects、前端)计划不纳入单元测试,有状态组件 + 外部 IO
的单测维护成本接偏高,回报率低,改由人工测试 + 用户反馈循环兜底。本 PR 仅守住纯函数与关键接缝的安全边界。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-12 14:11:15 +08:00