前言¶
DeepSeek Harness(DSH)Desktop 每次啓動會在 127.0.0.1 上綁定一個隨機端口,併爲該 Host 設置名爲 dsh-auth-* 的認證 Cookie。瀏覽器不按端口隔離 Cookie,舊端口對應的條目又不會自動過期,多次重啓後 Cookie 請求頭會持續變長,最終在 HTTP 解析階段觸發 431 Request Header Fields Too Large,本地頁面表現爲認證失敗。常見應對是手動清 Cookie 或調大服務端頭限制,前者麻煩,後者不觸及根因。下面介紹社區插件 dsh-auth-cookie-hygiene:在本地 HTTP 響應裏追加過期 Set-Cookie,讓瀏覽器自行刪除已停止 Host 留下的 dsh-auth-*,屬於預防性緩解,不修改安裝包、不讀寫瀏覽器 Cookie 庫、不碰簽名密鑰、不關閉認證、也不調大請求頭上限。
這是什麼¶
dsh-auth-cookie-hygiene 是標準 DSH bundle 插件,維護者爲 CECILIALOVE0616,分類爲 admin-security,許可證 MIT,當前版本 0.1.1(見倉庫 package.json)。它通過 Cordis 掛到 webServer.server,在已認證的首頁響應(顯式 200/303、非流式)上合併發送過期頭;401/403、流式響應會原樣放行,原有 Set-Cookie、狀態碼、Location 與響應體不變。
背景與清理規則¶
DSH 每次新端口都會多留一個 dsh-auth-*,插件只在判定舊端口確實無人監聽時纔會下發過期頭。處理範圍限於字面量 127.0.0.1:端口 的本地 HTTP 請求,且請求 Host 端口須與實際監聽端口一致。
同時滿足以下條件纔會被清理:
- 名字爲
dsh-auth-*,格式自洽,且名字裏的 authority 與其 SHA256 前綴相符(僅自洽性篩選,不驗證真實簽名); - 該 authority 的端口兩次新鮮 TCP 探測均爲
ECONNREFUSED,且兩次間隔不小於confirmGapMs; - 不是當前 Host,也不是任何正在監聽的 Host。
始終保留:當前 Host、其他在監聽 Host、v2/API Cookie、非 127.0.0.1 或 HTTPS 形態的 Cookie、畸形/超長/判定不確定的 Cookie。探測超時或其他錯誤按「未知」處理並保留。
README 明確說明:已大到被 parser 拒絕的請求進不了應用層,插件看不到,必須先離線清一次 Cookie;端口復原/進程切換存在 TOCTOU 窗口;依賴當前版本的 webServer.server 與 v1 Cookie 格式,不承諾跨大版本兼容。
安裝與啓用¶
插件零運行時依賴,僅使用 Node 內置模塊,需要 Node ≥ 22.13。官方 README 未提供 dsh plugin add 一類命令,安裝流程如下。
先打包:
git clone https://github.com/CECILIALOVE0616/dsh-auth-cookie-hygiene.git
cd dsh-auth-cookie-hygiene
npm pack # 產出 dsh-auth-cookie-hygiene-<version>.tgz
在 DSH 的 profile 目錄(與 cordis.patch.yml 同級)中:
- 安裝依賴:
npm install <tgz 路徑> - 把同名 bundle 加進 profile 配置的
dsh.profile.bundles - 包內
dsh.bundle.patch指向cordis.patch.yml,由它在配置樹中插入 backend 插件,例如:
- insert:
- id: dsh-auth-cookie-hygiene
name: dsh-auth-cookie-hygiene
- 重啓 DSH,先走一遍 welcome / account 流程確認登錄正常。
安裝前備份 profile 並退出 DSH;不要在運行中的 profile 上併發改依賴。卸載時移除 bundle 與依賴再重啓,effect 會釋放掛鉤。
配置¶
全部可選,非法值回落默認值。寫在與上述 insert 條目同級的 config 下即可。常用項如下(完整表見倉庫 README):
| 鍵 | 默認 | 說明 |
|---|---|---|
enabled |
true |
關閉後只掛載不清理 |
maxPerResponse |
8 |
單次響應最多下發多少個過期頭(1–32) |
maxExtraHeaderBytes |
3072 |
單次響應追加頭的字節上限 |
confirmGapMs |
120 |
兩次拒絕探測之間的最小間隔 |
confirmTimeoutMs |
700 |
新鮮探測總預算;到點放行 |
probeTimeoutMs |
250 |
單次 TCP 探測超時 |
debug |
false |
輸出接入與配置日誌 |
不建議放大限額或等待時間:真正約束是瀏覽器端請求頭總大小,不是插件側參數。單次響應默認最多 8 條過期頭,首屏可能清不完大量歷史 Cookie,多刷新幾次即可。
開發與自測¶
維護者在倉庫內提供測試:
npm test # node --test "test/*.test.js"
npm run test:sandboxed # 受限環境下關掉測試進程隔離(Node 24+ 支持)
README 稱共 50 項測試,覆蓋冷請求、活躍 Host 保留、v2/畸形輸入、原登錄頭合併、401 不變、流式響應、探測超時與卸載放行等;若沙箱不允許 node --test 派生子進程,可改用 npm run test:sandboxed。
適用場景與注意¶
適合長期本地使用 DSH Desktop、頻繁重啓導致 loopback 認證 Cookie 堆積、希望在不改 DSH 本體的前提下做預防的用戶。插件以當前 DSH 進程權限運行,安裝前應閱讀源碼與 MIT 許可證,自行評估是否納入 profile。
已知限制(摘自 README):
- 不修復已觸發的 431,堆積較多時需先退出 DSH 離線清理;
- 無法驗證 Cookie 真實性,僅格式自洽 + 端口關閉篩選;
- 探測與刪除之間端口重新啓用時,可能誤過期剛啓用的實例,需重新打開登錄鏈接;
- 真實桌面 profile 的長期表現與 DSH 大版本升級兼容性,文檔未聲稱完整驗收。
DSH 生態理念是「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-auth-cookie-hygiene 針對隨機端口 Host 導致的 dsh-auth-* 堆積,用本地響應裏的過期 Set-Cookie 做預防性衛生,邊界清晰、可配置、可卸載。進一步細節與配置表見 GitHub 倉庫 與 SkillHub 目錄頁。