# 安全策略 ## 上报漏洞 **请不要为安全问题开公开 Issue。** 请通过 GitHub 的[私密漏洞报告](https://github.com/fsrmqi/dsh-research-kit/security/advisories/new)提交,或直接邮件联系仓库维护者(地址见 `package.json` 的 `author` 字段)。 请尽量附上: - 受影响的版本 / commit; - 复现步骤或概念验证; - 影响评估(能读到什么、能改到什么); - 你希望如何被署名(如愿意)。 这是一个由个人维护的开源项目,**没有**正式的 SLA。我会尽力在合理时间内确认收到并给出评估,但请不要依赖固定的响应时限。 ## 本插件的安全边界 理解这些边界,有助于判断某个行为是缺陷还是设计取舍。 ### 插件会做 | 行为 | 说明 | | --- | --- | | 注册 DSH 槽位 | 向 `conversation.view` 与 `conversation.input.*` 注册界面入口,卸载时统一释放 | | 写入 / 提交草稿 | 仅在你点击「写入输入框」或「发送到当前会话」时调用 `inputActions.setDraft()` / `submit()` | | 本地存储 | 收藏、使用历史、方法卡、灵感资产与证据库的「当前项目」标记写入浏览器 `localStorage`(key 前缀 `dsh-research-kit.`) | | 证据库持久化 | **仅在你逐条确认保存后**,把来源元数据与你主动写下的笔记写入浏览器 IndexedDB(库名 `dsh-research-kit-evidence`)。可按项目导出 JSON、可单条删除、可按项目彻底删除。宿主未提供 IndexedDB 时降级为页面内存并显式提示,不静默伪装成已持久化。证据图谱只读其中的来源元数据(来源库 / 稳定标识符 / 核验状态)用于绘制节点,**不展示笔记正文,也不写入或修改条目** | | 当前页面内存 | 本会话证据索引仅在页面内存中共享给工作台、查询面板和证据图谱;刷新或关闭页面即清空 | | 出网(仅在你主动触发时) | 公开数据源直查,经 DSH 的受控 web 服务 `ctx.web.fetch()` 发出 | | 调用模型(仅在你主动触发时) | 草稿增强的语义档,复用**当前会话已建立的**模型路由 | ### 插件不会做 - **不持有任何凭据。** 不存 API Key、订阅令牌或 MCP 凭据;浏览器端与 Node half 都不持有模型 Key; - **不发起后台或定时网络请求。** 零遥测,不上传使用统计; - **不读取文件内容。** 材料引用走 DSH 原生 `@文件`,插件只做提示; - **不拦截你的键盘。** 不截获 Enter,不改变原生输入框行为,不自动发送; - **不伪造检索结果。** 数据源未接通时明确回退到 Agent / MCP,不假装已查询; - **不自动保存、不静默注入证据。** 证据条目只能由你点击「保存到证据库」并确认后入库,查询、启动工作流或调用 Agent 都不会静默写入;历史证据也不会被自动拼进 Prompt——所有复用都必须经过「检索 → 预览 → 勾选 → 写入」。 ## 已知的风险面 以下是设计上必须留意的部分,不是漏洞,但值得知情: | 风险面 | 说明 | | --- | --- | | Node half 的两条路由 | `/dsh-research-kit/query` 与 `/dsh-research-kit/semantic-enhance*` 注册在 DSH Web 服务上。前者出网受 allowlist 约束,并带 5 分钟结果缓存与每 IP 每分钟 12 次的速率预算;后者只接受当前会话已建立模型路由的请求 | | 研究上下文传递 | 语义增强会携带当前会话已选目录资源的**只读摘要**(如数据库与技能的名称、说明),服务端做 4000 字符上限截断,仅作改写参照,不落盘、不授权数据源访问 | | 本地存储内容 | 灵感资产正文超过 8000 字符时拒绝保存。证据库条目只保存**来源元数据**(标题 / 来源数据库 / 稳定标识符 / 原始链接 / 保存时间 / 项目 / 标签 / 保存原因)与**你主动写下的笔记**,既无链接又无稳定标识符的来源直接拒绝入库;不保存检索词、原始 API 响应、全文与附件。原始附件、患者数据与完整查询结果一律不入库。注意区分两份「证据」:**本会话证据索引不落盘**(仅页面内存),**证据库落 IndexedDB**。但**浏览器 localStorage 与 IndexedDB 都不是加密存储**——请勿把敏感材料粘贴进方法卡、灵感资产或证据笔记 | | vendored 工件 | `vendor/promptkit-embed.js` 是第三方构建产物,已用 SHA-256 锁定并由 `npm run check` 校验,但它的完整代码未经本项目逐步审计 | | 依赖 DSH 宿主契约 | 插件行为依赖上游 DSH 的槽位与 `inputActions` 契约。DSH 处于 Developer Preview,重大变更可能带来行为漂移(此时按 [docs/MANUAL-QA.md](docs/MANUAL-QA.md) 复验) | ## 不处理的类别 - 需要上游 DSH 本身修复的问题——请报给 [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness); - 由第三方插件或宿主配置引起的问题(例如其他插件注册了同一槽位); - 需要攻击者已具备本机文件系统或浏览器 profile 访问权限的场景——那已超出本插件的信任边界。 ## 支持的版本 仅当前主版本接受安全修复。项目处于 `0.1.x`,尚未发布到 npm;从源码或 GitHub 安装。