前言¶
DeepSeek Harness (DSH) 的核心设计理念是「一切皆插件」。在构建智能体应用时,会话日志和发送给模型的请求中常包含敏感信息(如 API Key、私钥、Token 等)。dsh-secret-scrub 是一个针对这一场景的不可逆密文清洗插件,它在文本持久化到日志或发送给模型之前,通过正则匹配将其替换为占位符,防止敏感信息泄露。
它是什么¶
dsh-secret-scrub 是一个提取自 kaya-ai-terminal 项目的独立插件。它为 DSH 提供了密文清洗能力,通过正则匹配密文形状,将其替换为 [REDACTED:<category>] 占位符。该插件由 jkt-check 维护,遵循 MIT 许可证。
核心功能¶
- 不可逆替换:匹配到的密文会被永久替换,无法恢复原文。
- 多层级清洗:
- minimal:仅运行 Tier 0(核心密文规则)。
- balanced(默认):运行 Tier 0 + Tier 1(环境变量、云厂商 Key)。
- aggressive:运行 Tier 0 + Tier 1 + Tier 2(PII 信息、高熵值文本如 SHA256)。
- 监听器挂载:插件挂载了三个前置瀑布流监听器,分别拦截:
- 用户消息(
agent/pre-step)。 - 工具执行结果内容(
tools/post-execute)。 - 工具代码调度的持久化日志(
tools/ptc-dispatch-log)。
- 用户消息(
- 自定义规则:支持通过配置文件添加自定义的正则规则。
- 引擎导出:提供纯净的清洗引擎
scrubText,不依赖 DSH 即可单独在 Node.js 环境中使用。
安装与启用¶
使用官方 npm 包安装命令即可激活插件。插件默认使用 balanced 级别,无需额外凭证。
dsh plugin --profile headless add dsh-secret-scrub
若需测试本地修改,可使用 tarball 路径安装:
dsh plugin --profile headless add /path/to/dsh-secret-scrub-0.1.1.tgz
典型用法¶
安装并重启对应 profile 后,执行包含密文的命令,文本在到达日志和模型前已被清洗。
dsh --profile headless "echo AWS AKIAIOSFODNN7EXAMPLE"
若需调整清洗级别或添加自定义规则,需覆盖默认的 cordis.patch.yml:
- id: secret-scrub
config:
level: aggressive
extra:
- category: internal-token
pattern: 'internal-[0-9]{4}'
若不使用 DSH,可直接作为 Cordis 插件使用:
import { Context } from '@deepseek-ai/cordis'
import * as SecretScrub from 'dsh-secret-scrub'
const ctx = new Context()
await ctx.plugin(SecretScrub, {
level: 'aggressive',
disabled: ['env-var-secret'],
extra: [
{ category: 'internal-token', pattern: 'internal-[0-9]{4}' },
],
})
注意事项¶
- 不可逆性:清洗过程不可逆,被替换的密文无法找回。
- 正则局限:未加前缀的密钥、跨文本块的密钥以及编码形式(Base64、URL 编码)可能因保守的规则形状而无法被匹配。
- 误报与漏报:Tier-2 规则匹配的是“形状”而非“已证明的密钥”,因此存在误报(如指令中的邮箱可能被清洗)。高熵值文本(如 git SHA)在 aggressive 模式下会被清洗。
- 安全依赖:不要仅依赖此插件作为防泄露的唯一控制手段。
总结¶
该插件为 DSH 用户提供了基础的敏感信息保护能力,通过分级配置和自定义规则适配不同场景。更多细节与源码可参考下方链接。