不可逆密钥脱敏守护:在访问密钥、Bearer 令牌、私钥块进入会话日志和模型请求之前,将其改写为 `[REDACTED:<category>]` 占位符。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-secret-scrub
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:jkt-check/dsh-secret-scrub
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
不可逆的密钥脱敏守护插件,源自 kaya-ai-terminal 项目的用户敏感信息保护策略,现独立开源(大陆官网:https://www.yunhouai.com;非大陆地区官网:https://www.yunhou.ai)。它在文本流向会话日志和模型请求的路上进行改写:当配置的规则命中形似密钥的片段——访问密钥、Bearer 令牌、私钥块——该片段会被不可逆地替换为 [REDACTED:<category>] 占位符,使持久日志和模型请求在被覆盖的位置只携带占位符。
安装
npm install dsh-secret-scrub
运行时依赖为 @deepseek-ai/cordis(peer)和 @deepseek-ai/schemastery。@deepseek-ai/dsh-* 系列 peer 包仅为类型依赖且可选。
在 dsh profile 中使用
本包声明了 dsh.bundle.patch,一条命令装完即用(默认 balanced 级别脱敏,无需任何凭据):
# 1. 安装 dsh CLI
npm i -g @deepseek-ai/dsh
# 2. 把插件装到目标 profile 里(以 headless 为例)
dsh plugin --profile headless add dsh-secret-scrub
# 发布前想测试本地改动,可用 npm pack 生成的 tarball:
# dsh plugin --profile headless add /path/to/dsh-secret-scrub-0.1.2.tgz
# 3. 重启该 profile 后,运行包含敏感信息的任务——密钥会在进入模型/会话日志前被脱敏
dsh --profile headless "echo AWS AKIAIOSFODNN7EXAMPLE"
dsh plugin add 会自动应用包内的 cordis.patch.yml(以 balanced 级别挂载插件)。想调整级别或追加自定义规则,可在 profile 补丁层 ~/.dsh/profiles/headless/cordis.patch.yml 中覆盖同 id 的配置:
- id: secret-scrub
config:
level: aggressive
extra:
- category: internal-token
pattern: 'internal-[0-9]{4}'
作为独立 Cordis 插件使用
如果你不使用 dsh,也可以直接挂载到 Cordis Context 上:
import { Context } from '@deepseek-ai/cordis'
import * as SecretScrub from 'dsh-secret-scrub'
const ctx = new Context()
await ctx.plugin(SecretScrub, {
level: 'aggressive', // 脱敏深度:minimal | balanced(默认)| aggressive
disabled: ['env-var-secret'], // 仅限 tier 1/2 内置类目——tier 0 不可禁用
extra: [
{ category: 'internal-token', pattern: 'internal-[0-9]{4}' },
],
})
插件挂载三个前置的 waterfall 监听器,先委托下游,再对链路最终采纳的内容脱敏:
agent/pre-step改写每个 step 采纳的用户消息,然后才进入会话日志和模型请求。用户消息按inputLevel脱敏——默认aggressive,与level无关——即使工具输出保持较低级别,粘贴进来的 PII 和密钥也会按全量规则表处理。tools/post-execute改写被接受的工具结果的纯文本内容。tools/ptc-dispatch-log改写run_code子调用的tool/code-dispatch持久化副本。
| 字段 | 默认值 | 含义 |
|---|---|---|
level |
balanced |
工具输出的脱敏深度:minimal 只跑 tier 0,balanced 加 tier 1,aggressive 加 tier 2——PII 与高熵兜底 |
inputLevel |
aggressive |
agent/pre-step 采纳的用户消息的脱敏深度,独立于 level |
disabled |
[] |
关闭指定的 tier 1/2 内置类目;tier-0 核心规则不可禁用,禁用会在加载时报错 |
extra |
[] |
部署方追加的规则,在所有级别下生效:全局唯一的小写连字符 category 加上以 new RegExp(pattern, 'g') 编译的 pattern |
无效配置在启动时即以明确的错误失败——未知或 tier-0 的 disabled 类目、无法编译的 extra 正则、不能出现在占位符中的类目 id、重复类目——绝不静默回退。
内置规则分级
level 选择生效的最高 tier。tier 0–1 为前缀锚定,tier 2 按形状匹配(规则见 src/rules.ts):
| Tier | 生效级别 | 类目 |
|---|---|---|
| 0 — 核心密钥 | 所有级别;不可禁用 | private-key、private-key-truncated(截断 PEM 护甲)、api-key(通用 apikey 赋值)、aws-access-key、github-token、google-api-key、deepseek-key、openai-key、anthropic-key、gitlab-pat、rollbar-token、stripe-key、slack-token、slack-signing-secret、slack-webhook-url、npm-token、pypi-token、sendgrid-key、twilio-key、digitalocean-token、shopify-token、telegram-bot-token、tavily-key、age-secret-key、docker-pat、notion-token、supabase-token、linear-api-key、generic-sk-key(sk-/sk_ 兜底)、url-credentials(连接串 authority)、url-access-token(OAuth 回调令牌)、generic-bearer(Bearer 令牌与 JWT) |
| 1 — 赋值与云厂商密钥 | balanced 及以上 |
env-var-secret(名称以 _ 分段整体包含 KEY/SECRET/TOKEN/PASSWORD 的大写赋值)、azure-storage-key、alibaba-access-key、key-assignment(任意大小写的同类赋值形状,带取值过滤) |
| 2 — PII 与高熵兜底 | 仅 aggressive |
email、phone-cn、phone-intl、id-cn、credit-card(Luhn 校验)、ssn-us、high-entropy |
直接使用引擎
纯脱敏引擎从 dsh-secret-scrub/rules 导出,不依赖 Cordis:
import { BUILTIN_RULES, scrubText } from 'dsh-secret-scrub/rules'
const { text, redactions } = scrubText('key: AKIAIOSFODNN7EXAMPLE', BUILTIN_RULES)
// text → 'key: [REDACTED:aws-access-key]'
// redactions → { 'aws-access-key': 1 }
已知限制
脱敏是单向的、基于正则的。无前缀密钥、跨文本块拆分的密钥、编码形式(base64 包裹、URL 转义)按设计会绕过保守的规则形状。tier-2 规则匹配的是形状而非确凿的密钥,因此以误报换覆盖——任务说明中的邮箱会被当作密钥脱敏,哈希状文本(git SHA、SHA-256 摘要)在 aggressive 级别会命中 high-entropy 兜底。不要把本守护当作防止凭证泄漏的唯一手段。
开发
npm install
npm run typecheck
npm test
npm run build
许可证
MIT — Copyright (c) 2026 jkt-check
链接
同类插件
toby-bridges/api-relay-audit★ 884
从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。
SeaOf0/dsh-redteam-model★ 716
面向授权安全研究的 DSH 合集:九个工作模式(redteam 总控、渗透测试、代码审计、二进制分析、攻防评估、免杀对抗、应急溯源、云安全攻防、CTF 解题)与十五个运行时插件,设置页管理台支持一键部署、安装、更新与卸载。
howmp/dsh-pentest★ 609
面向 DeepSeek Harness 的授权渗透模式:以探索链路记录目标、线索、资产与漏洞,并在 Web 中可视化展示。
PerryLink/dsh-auto-review★ 233
审批链上的第二模型自动审查:只读审查子代理返回带理由的 allow/deny 结构化裁决,默认 fail-closed。
ADWMC/helm-d#helmd★ 225
单包逆向与渗透测试安全分析插件:首轮工具收敛、领域路由与 33 个工具,覆盖 APK、Web、原生二进制、协议、恶意样本与 LLM 场景的逆向分析、加壳脱壳与 License 破解绕过;内置 H-CoT 评估引擎(语义路由、/hcot 命令)、账本驱动的 Web 工作台与工具货架、磁盘案件工作区(证据链自动存证、E 编号结论校验、上下文压缩后恢复)、GitHub 工具检索与 361 篇按需参考文档。
NanmiCoder/dsh-auto-mode★ 164
在 Workspace Write 与 Full access 之间增加 Auto 权限档:日常操作留在官方 workspace-write 沙箱内,由当前会话模型复核升权与破坏性调用,精确的越界访问按次放行一次,意图不明时询问,命中关键路径则拒绝。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。