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
羽毛球分组比赛记分
小程序二维码

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

小夜