前言¶
在 DSH(DeepSeek Harness)里用智能体改代码、打包外发时,.env、API key、托管平台 token 很容易被当成「项目文件」一起带进 git push 或 npm 发布。事后靠公开仓库扫描补救,成本远高于发布前拦一道。
下面介绍社区插件 dsh-leak-guard(维护者 7gzgn):在推送、发包、打包外发之前对工作区做一次本地扫描,检查是否混入不该公开的凭据。分类为 admin-security;仓库与说明见 SkillHub 目录页 与 GitHub。
这是什么¶
dsh-leak-guard 是给 DSH 用的发布前凭据审计插件(当前包版本 0.1.1,MIT 许可证)。它扫描指定路径下的文件,查找 API key、token、私钥、数据库连接串、明文密码等;零依赖、纯本地、不联网、不上传内容,命中结果在返回前脱敏(预览仅前 6 个字符)。
设计目标可以概括成:发布动作之前先跑扫描,ok = false 就不要发。
检测范围¶
README 用表格归纳了主要类别,完整规则可通过工具打印(当前 23 条内容规则 + 11 条文件名规则)。
| 类别 | 例子 |
|---|---|
| 大模型 key | sk-…、sk-ant-…、hf_… |
| 代码托管 token | ghp_/gho_/ghu_/ghs_/ghr_、github_pat_…、glpat-… |
| 云厂商 | AKIA…/ASIA…(AWS)、LTAI…(阿里云)、AKID…(腾讯云)、AIza…(Google) |
| 支付 / 通信 | sk_live_…(Stripe)、xox…(Slack)、SG.…(SendGrid)、Telegram bot token |
| 私钥 / 证书 | -----BEGIN … PRIVATE KEY-----、id_rsa、*.pem / *.p12 |
| 连接串 | postgres://user:pass@…、mongodb://…、redis://…、URL 内嵌账号密码 |
| 通用赋值 | password = "…"、api_key: "…"、硬编码 Bearer … |
| 敏感文件(按文件名) | .env*、.credentials.yaml、.npmrc、.netrc、.git-credentials、service-account*.json、.gh-token |
规则策略上强调宁可漏报、不要误报:要求特异前缀与足够长的随机体,并对 sk-xxxx、<YOUR_KEY>、${TOKEN}、change-me 等占位符白名单放行。
在 DSH 里调用¶
插件注册为 DSH 工具 leak_guard。扫描指定目录示例:
leak_guard({ action: "scan", path: "D:\\dsh\\projects\\my-thing" })
返回 JSON 中,ok: true 表示未发现需处理的项;ok: false 时查看 findings,并优先处理 critical / high 级别。counts 汇总各级数量,stats 给出扫描文件数、跳过数与字节数。
查看完整规则列表:
leak_guard({ action: "rules" })
作为 Node 库使用¶
除 DSH 工具外,包导出纯 ESM 扫描器(Node >= 18),可在脚本或 CI 中直接引用:
import { scanPath } from 'dsh-leak-guard/scanner'
const result = await scanPath('/path/to/repo')
if (!result.ok) {
console.error('别发,先处理:', result.findings)
process.exit(1)
}
package.json 还提供 ./patterns 等子路径导出,便于单独复用规则定义。
实现上的几条取舍¶
- 先粗筛再精查:联合正则过滤无关行,疑似行再跑完整规则,中等规模项目可达秒级。
- 同条泄露不重复报:已有具体规则命中时,不再叠加泛化的
assignment-secret。 - 离线边界:不联网、不写盘、不读未指定路径、不跟随符号链接;二进制文件默认跳过;单文件默认 1MB 上限,超出只提示不扫描。
- 高熵检测默认关闭:开启
entropy: true时会对长随机串更敏感,且仅在同行出现 key/token/secret 等上下文词时才报,噪声仍可能偏多。
局限与 DSH 兼容性¶
务必先认清边界,再把它当习惯动作而不是保险:
- 不是 git 历史扫描器,只看工作区现有文件,不翻已提交历史。
- 会漏:规则有限,新服务前缀或自定义编码可能漏检,定位是兜底。
- 声明的 DSH 兼容范围为
>=0.2.0-rc.2 <0.3.0-0(覆盖整个 0.2 线);运行时若拿不到@deepseek-ai/dsh-tools的defineTool会降级,避免拖垮宿主。
安装与使用注意¶
DSH 生态采用「一切皆插件」;SkillHub 是社区目录站点,与 DeepSeek / 幻方无官方从属关系。安装前请在 GitHub 仓库 阅读源码与 MIT 许可证,确认符合你的安全策略。
插件以当前 DSH 进程权限读取你传入的 path,只扫描你指定的目录。在 agent 自动 git push 或发包流程里,把 leak_guard 固定在发布前一步,比事后公开仓库救火更省事。
结尾¶
dsh-leak-guard 解决的是「发出去之前工作区里有没有凭据」这一问题:本地、脱敏、可脚本化。需要规则明细时用 action: "rules";日常发布前用 action: "scan",以 ok 为准决定是否继续。
- 目录页:https://www.skillhub.cn/plugins/7gzgn/dsh-leak-guard
- 源码与文档:https://github.com/7gzgn/dsh-leak-guard