dsh-redact:在工具输出进入模型与会话日志前脱敏凭据

前言

在 DeepSeek Harness(DSH)里跑智能体时,每一轮对话的 transcript 会落盘,并随请求发给模型提供方。工具照常执行:env、误执行的 cat .env、git remote -v 里带 token 的 URL、堆栈里的连接串,都会原样写进这份副本。命令本身往往不能拦,但持久化与外传的那份文本可以处理。下面介绍社区插件 dsh-redact(维护者 drm-nz,分类 admin-security):在工具结果送往模型和会话日志之前,对文本做原地改写,工具进程仍保留完整输出。

这是什么

dsh-redact 是 DSH 插件,一句话定位:在工具输出到达模型或 session log 之前,脱敏其中的 secret。设计原则是 redact the transcript, never the process——不阻断命令、不改写命令、不降低权限,只改 destined for 模型与已保存会话的那一段文字。

数据流可以概括为:

tool executes ──► result content ──► tools/post-execute hook ──► model + session log
    full access                        (this plugin)                [REDACTED:NAME]

插件零运行时依赖,MIT 许可,当前 package 版本为 0.1.0。社区目录页:https://www.skillhub.cn/plugins/drm-nz/dsh-redact ;源码与说明:https://github.com/drm-nz/dsh-redact 。目录站点为社区生态索引,与 DeepSeek / 幻方无官方从属关系。

核心功能:四层脱敏

四层彼此独立,可在配置里开关。

层级 默认 作用
exact 开 敏感环境变量取值(如 DATABASE_URL、MYSQL_PWD、代理 URL 等)以及你在 secrets 里配置的明文
patterns 开 已知凭据格式(见下表)、PEM 私钥、JWT、Bearer …、URL userinfo 密码等
context 开 无固定前缀、但文档约定名称旁的凭据(如 AWS secret/session token)
keywords 关 password=、token=、api_key= 等锚定取值;误报更高,需主动开启

patterns 层识别的部分格式(前缀与体长由规则表生成,避免 matcher 漂移):

格式 前缀 体长
aws-access-key AKIA / ASIA 16
github-token gh[pousr]_ 36
github-pat github_pat_ + 22 + _ 59
gitlab-pat glpat- 20
openai-key sk- 48
openai-project-key sk-proj- ≥ 40
anthropic-key sk-ant- ≥ 20
google-api-key AIza 35
stripe-secret sk_live_ / rk_live_ 24
以及 npm、DigitalOcean、Shopify、Mailgun、Slack、Sendgrid、Twilio 等 (见 README 表)

匹配故意不要求尾部词界:凭据与相邻文字粘在一起时,仍会去掉凭据段;过短的形似串会保留。无规则的形状不在 patterns 范围内,由 exact 层用环境变量与 secrets 补网。

路径型变量(PWD、OLDPWD、KUBECONFIG)默认不脱敏,除非变量名本身强烈表示凭据(如 MYSQL_PWD)。

安装与启用

需要先安装带插件管理器的 DeepSeek Harness。Host 插件在启动时加载,安装后需重启应用。

从 GitHub 安装(README 推荐方式):

dsh plugin --profile desktop add github:drm-nz/dsh-redact

插件管理器校验仓库、安装并加入 profile 的 bundle 列表。安装完成后在 Settings → Plugins 中可见,默认启用。

卸载:

dsh plugin --profile desktop remove dsh-redact

本地 checkout 可通过 profile 的 package.json 使用 link: 依赖并执行 pnpm install,细节见仓库 README;一般用户用上述 dsh plugin 命令即可。

注意:插件以当前 DSH 进程权限运行;安装前应自行查看源码与 LICENSE,确认符合你的安全策略。

配置

在 profile 的 cordis.patch.yml 里按 id 覆盖 bundle 配置行,用 override,不要重复 insert 同一 id。

- id: dsh-redact
  config:
    enabled: true
    tiers:
      exact: true
      patterns: true
      context: true
      keywords: false
    minLength: 8
    allowNames: ["SSH_AUTH_SOCK"]
    secrets: []
    # debugFile: /tmp/dsh-redact.log  # optional: one line per hook call
字段 默认 含义
enabled true 总开关;false 时结果原样返回
tiers.* 见上 各层开关
minLength 8 短于此长度的值不当作 secret,减少误伤普通词
allowNames ["SSH_AUTH_SOCK"] 即使取值像 secret 也跳过的变量名
secrets [] 额外要脱敏的字面量(环境里拿不到的)

exact 层在插件加载时从当时环境快照;之后 export 的变量需重启才会进入快照。环境与 secrets 重复的值只脱敏一次,标签用环境变量名;匹配按最长优先。

典型用法:验证是否生效

README 给出三档验证,由易到难。

1. 启动自检(自动)
每次启动会对合成凭据跑 matcher,并向 ~/.dsh/health.log 追加一行,含 ok 表示规则仍有效。例如:

2026-11-01T02:00:42Z dsh-redact         ok   rules=37 probe=patterns redacted=yes

查看:

tail -n 2 ~/.dsh/health.log
grep -v ' ok ' ~/.dsh/health.log   # 仅看异常

2. Hook 探测(一次工具调用)
启动自检不证明 tools/post-execute 已挂载。让智能体执行:

printf 'hook probe: ghp_%s\n' "$(printf 'a%.0s' {1..36})"

正常应看到:

hook probe: [REDACTED:github-token]

若仍是明文,检查插件是否启用并重启(host 插件仅在启动加载)。

3. 会话日志
界面上已脱敏的内容,在磁盘 persisted session 里也必须是脱敏后的;这是插件存在的主要目标副本。

探测串不是真实凭据,仅为 github-token 形状以便 patterns 层匹配。

适用场景与边界

适合:需要在本地保留或分享 transcript、又不想把工具输出里的凭据一并暴露的 DSH 桌面/智能体开发场景;与 admin-security 类诉求一致,作为 transcript 侧的一道网。

务必知晓的限制(README 原文要点):

  • 脱敏不等于撤销:secret 若已进入某次模型请求,插件无法撤回。
  • 仅覆盖工具输出:模型生成文本、prompt、shell history、应用自有日志不在 hook 内。
  • 不能识别无规则的 secret:Base64 包裹、拆分、重编码等可能漏网;coverage 是网,不是保证。
  • 无网络、不改进程:只读写字段文本;可选写 debugFile 诊断行。

结尾

dsh-redact 在 DSH「一切皆插件」生态里,专门处理 transcript 与 session log 上的凭据泄露面,而不动工具执行本身。若你在 Harness 里频繁跑 shell、读配置、连远程,值得在 profile 里装上并用 hook 探测确认一遍。

  • 社区目录:https://www.skillhub.cn/plugins/drm-nz/dsh-redact
  • GitHub:https://github.com/drm-nz/dsh-redact
羽毛球分组比赛记分
小程序二维码

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

小夜