dsh-secret-form:DeepSeek Harness 一次性密钥链接

前言

在 DeepSeek Harness(DSH)里,模型获取 API 密钥的常见做法是让用户把密钥粘贴到聊天中。这会把密钥写入会话日志、对话记录、所有后续请求以及任何导出的会话里,安全风险高。

dsh-secret-form 用一次性 Web 表单替换了直接粘贴。模型调用 secret_create 得到链接,用户在浏览器或手机打开表单,输入后保存;插件再将值写入凭证存储或文件;模型随后用 secret_result 获取状态与长度,但永远不会拿到明文值。

插件说明

  • 名称:dsh-secret-form
  • 维护者:unera
  • 分类:admin-security
  • 定位:提供一次性密钥链接,让模型获取密钥时不再把值暴露在会话记录中
  • 仓库:https://github.com/unera/dsh-secret-form

插件声明 inject: ['tools', 'webServer'],依赖 Web GUI 服务,并在代理表面注册四个工具。

安装与启用

安装方式从 npm 或 GitHub 仓库选择。安装后通过 profile patch 挂载:

从 npm 安装

dsh plugin --profile <profile> add @dr-co/dsh-secret-form

从 GitHub 安装

# 指定版本标签
dsh plugin --profile <profile> add "git+https://github.com/unera/dsh-secret-form.git#v0.1.0"
# 指定 commit
dsh plugin --profile <profile> add "git+https://github.com/unera/dsh-secret-form.git#<sha>"
# 本地开发
dsh plugin --profile <profile> add file:$PWD/dsh-secret-form

挂载配置(YAML):

- id: secret-form
  name: '@dr-co/dsh-secret-form'
  config:
    routePrefix: /secret
    defaultTtlSeconds: 300
    defaultLocale: en
    publicUrl: https://dsh.example.org

参数说明:
- routePrefix:默认 /secret,必须以 / 开头
- defaultTtlSeconds:默认 300 秒,范围 30..3600
- defaultLocale:默认 en,支持 en|ru|de|fr|es|pt|zh|ja
- publicUrl:可选,用于代理后场景,否则返回监听器原点

四个工具

secret_create

创建一次性密钥表单,返回链接。

参数 类型 必需 说明
ref string 是 目标引用:凭证引用如 OPENAI_API_KEY;文件目标为文件路径
label string 是 表单标题,2~5 个词
kind ‘single’ | ‘multi’ 是 单行输入或多行文本域
description string 否 标题下的一句说明,最多 300 字符
save object 否 默认 { "kind": "credentials" };文件目标为 { "kind": "file", "path": "…" }
ttlSeconds integer 否 默认 300,被限制在 30..3600
allowEmpty boolean 否 默认 false,为 true 时允许空提交,报告为 empty
expect string 否 正则表达式文本,结果携带 matchesExpect 字段
data object 否 最多 1 KB 的元数据,在工具结果中原样返回,页面不渲染

返回:{ uuid, url, expiresAt, data }。url 为绝对地址,由 Web 服务器的 getOrigin() 加上 routePrefix 与 43 字符令牌组成。

secret_result

查询表单状态,获取结果摘要。

参数 类型 必需 说明
uuid string 是 secret_create 返回的 uuid
waitSeconds integer 否 0..30,默认 0。大于 0 时等待状态从 pending 变为非 pending 后返回

返回:{ status, data, ref, label }。一旦有值提交,还会包含 length、lines、trimmed 以及 matchesExpect。status 可为:pending、saved、empty、cancelled、expired。提交的值不会出现在结果中。

secret_list

列出当前进程创建的所有表单,按创建时间倒序。

返回示例:

[
  {
    "uuid": "…",
    "ref": "OPENAI_API_KEY",
    "label": "OpenAI key",
    "status": "saved",
    "createdAt": "2026-10-21T12:28:30.263Z",
    "expiresAt": "2026-10-21T12:33:30.263Z",
    "data": {}
  }
]

secret_cancel

取消未完成的表单。

参数 类型 必需 说明
uuid string 是 secret_create 返回的 uuid

已完成的表单保持其当前状态。

Web 表面

路由与行为:

路由 方法 请求体 结果
<prefix>/<token> GET / HEAD — 表单或结果页
<prefix>/<token> POST application/x-www-form-urlencoded,含 value、action(save 或 cancel)、隐藏字段 lang 结果页

响应安全头:Cache-Control: no-store、Referrer-Policy: no-referrer、X-Content-Type-Options: nosniff、X-Frame-Options: DENY,以及 CSP:

Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline';
script-src 'unsafe-inline'; form-action 'self'; base-uri 'none'

表单页面语言:支持 en、ru、de、fr、es、pt、zh、ja。优先级:链接上的 ?lang=... > 浏览器 Accept-Language > defaultLocale。提交时保留用户起始语言,结果页使用相同语言。

结果页文案:
- 已保存
- 未存储(空提交)
- 已取消
- 链接已使用
- 链接已过期
- 链接无法识别

值的保存位置

凭证(默认)。通过 ctx.credentials.set(ref, value) 写入凭证存储,与适配器读取 apiKeyEnv 的来源一致,便于下次请求使用。

文件。在 save 中指定 { "kind": "file", "path": "…" }。扩展名决定格式(.yaml、.yml、.json、.env),其他扩展在创建表单时被拒绝,不会自动推断。

适用场景与注意

  • 适合需要将密钥等敏感信息从会话中剥离的场景,如 API 密钥、认证令牌等。
  • 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证(MIT)。
  • 建议在生产环境使用代理或反向代理,并通过 publicUrl 指明公网地址。

小结

dsh-secret-form 为 DeepSeek Harness 提供了一次性密钥链接机制,把密钥从会话记录中移除,只传递状态与长度信息。安装简单,配置项明确,适合需要严格管控敏感输入的开发场景。

目录页:https://www.skillhub.cn/plugins/unera/dsh-secret-form
GitHub:https://github.com/unera/dsh-secret-form

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye