# 安全策略 ## 这个插件碰什么数据 `share-transcript` 读的是 **DSH 本地会话日志**,然后把它变成可分享的文本。 会话日志里有你的提问、模型的回答、以及被截断的工具调用摘要——也就是你和 AI 之间发生过的全部内容。 这类插件的安全边界不是"有没有漏洞"这么简单,而是 **"谁能让这些内容出门"**。 ## 设计上的四条硬约束 | 约束 | 实现位置 | 它防住什么 | |---|---|---| | **没有鉴权服务就不服务** | `index.js` → `rejected()`,拿不到 `connection` 服务时直接 **503** | 退回"loopback 放行"等于把全部会话交给同机任意进程——包括你没打算信任的那些 | | **全部只读 GET** | 路由只有 `/transcript`、`/sessions` | 没有写操作,就没有 CSRF 攻击面 | | **只收人类消息** | `index.js` → `buildTurns()`,过滤 `source.kind !== 'user'` | `AGENTS.md`、`system-reminder`、`skill-catalog` 这些注入不会跟着对话出门 | | **跨会话引用带围栏** | `client.js` → `buildQuoteText()` | 引用内容是资料,不是指令;降低把 A 会话里的提示注入带进 B 会话的风险 | 默认脱敏覆盖:家目录路径(Windows / macOS / Linux,含正斜杠写法)、`sk-` / `ghp_` / `AKIA`、`Bearer` 令牌、邮箱。 ## 已知边界(不是漏洞,但你该知道) - **非家目录的绝对路径不脱敏**。脱了代码块就失去意义了。分享前自己看一眼。 - **项目名不脱敏**。同理。 - **`message` 参数单独查询时只扫最近 12 个会话**。超出返回 `message-scan-limited`(409), 这是预算限制,不是"消息不存在"——别照 404 处理。 - **脱敏是启发式,不是保证**。新格式的密钥(例如某个服务刚换的令牌前缀)可能漏过,导出前请自己扫一眼。 ## 上报 如果你发现的是**安全相关问题**(越权读取、鉴权绕过、脱敏漏网、路径遍历): 请用 GitHub 的 **Private vulnerability reporting**(`Security` 标签页 → `Report a vulnerability`), 不要开公开 issue。仓库维护者需要在 `Settings → Code security` 里开启这个入口; 若当时未开启,请先开一个不带细节的 issue 说"安全问题,求私下渠道",等回复后再补充。 不是安全问题(UI 错位、导出样式、文案)走普通 issue 就行。 ## 支持范围 只对 **最新 minor 版本** 提供修复。这个插件还在 0.x,接口和行为都可能在小版本之间变。