dsh-plugin-auth-guard:爲 DeepSeek Harness 加一層零信任認證與訪問控制

前言

DeepSeek Harness(DSH)是一個面向本地桌面工作流的 AI coding agent runtime,默認圍繞 127.0.0.1 設計。一旦想把它開放給局域網裏的手機、平板,或者部署到雲服務器上,會接連碰到幾個障礙:

1、非 localhost 來源調用特權接口(如 settings.describellm.providers)會被 403 Forbidden 攔下,遠程切換模型做不了;
2、移動端瀏覽器在純 HTTP 環境下沒有 Secure Context,crypto.randomUUID 未定義,RPC 全部失敗;
3、對局域網或公網開放端口後沒有認證機制,同一網絡裏的任何人都能創建會話、通過 agent 執行命令。

dsh-plugin-auth-guard 針對的就是這組問題:綁定並暴露網絡、注入移動端 polyfill、在 TCP 層建一道默認拒絕的認證網關。下面介紹它的功能、安裝和配置。

這是什麼

dsh-plugin-auth-guard 是 DeepSeek Harness(DSH)的認證與訪問控制插件,作者 lijx122,MIT 許可,要求 Node.js >= 20。一句話定位:企業級零信任認證、局域網/公網訪問控制與安全網關插件。

DSH 的理念是一切皆插件,這個插件同樣以 bundle 形式接入:在 TCP 服務器層攔截 HTTP request 與 WebSocket upgrade 事件,構建默認拒絕(Default-Deny)零信任網關——不進白名單的請求,一律先過認證。

核心功能

網絡暴露與特權 RPC 代理

1、將 DSH Web GUI 綁定到 0.0.0.0:3080,並動態枚舉所有活躍的局域網 IPv4 接口;
2、爲已認證客戶端安全代理特權 RPC(settings.describellm.providerscredentials.*),消除 403 Forbidden;
3、通過 tapIndex 動態向 <head> 注入移動端 crypto.randomUUID polyfill,保證純 HTTP 下移動端正常工作。

默認拒絕網關

  • 在 TCP 服務器層攔截 HTTP request 與 WebSocket upgrade 事件;
  • 未認證訪問核心 RPC(/api/*)、插件管理(/api2/*)、側邊欄路由(/sidebar/*)一律以 HTTP 401 阻斷,或直接銷燬 WebSocket。

憑據與令牌生命週期

  • 密碼以 32 字節加鹽 Scrypt 哈希存儲,敏感配置字段以 .role('secret') 聲明,防止明文外泄;
  • 使用 crypto.timingSafeEqual 做常量時間校驗,防時序側信道攻擊;
  • HMAC-SHA256 令牌內嵌當前密碼指紋,修改密碼後毫秒級全局吊銷所有令牌;
  • 修改密碼或登出時自動終止所有活躍的遠程終端/事件 WebSocket。

防僞造與限流

  • 校驗 req.socket.remoteAddress,防止 Host: 127.0.0.1 僞造與代理迴環反轉;
  • IP 滑動窗口限流:連續失敗 5 次封禁 15 分鐘(HTTP 429),並帶自動垃圾回收;
  • 全局突發限流:所有 IP 合計登錄頻率限制爲 40 req/min;
  • 請求體超過 64KB 立即中斷,防止流式 OOM 拒絕服務;
  • 基於嚴格主機名匹配的 CSRF 與跨站 WebSocket 劫持(CSWSH)防護。

界面與多標籤同步

  • 遵循 DSH 設計系統(--dsw-* CSS tokens、fish logo);
  • 鎖屏掛載於 document.bodyz-index: 2147483647),加背景模糊防點擊穿透;
  • 基於 BroadcastChannel 實現多標籤頁狀態即時同步。

安裝與啓用

官方提供三種方式。

方式一,DSH CLI(README 推薦):

dsh plugin --profile web add github:lijx122/dsh-plugin-auth-guard

方式二,DSH Web Marketplace:在 DSH Web GUI 依次進入 Settings → Plugins → Marketplace,搜索 auth-guard,點擊 Install。

方式三,本地鏈接(開發者模式):

1、把倉庫克隆到 ~/.dsh/plugins/dsh-plugin-auth-guard
2、在 ~/.dsh/profiles/web/package.jsondependencies 中添加:

{
  "dependencies": {
    "dsh-plugin-auth-guard": "link:../../plugins/dsh-plugin-auth-guard"
  }
}

3、把 dsh-plugin-auth-guard 追加到 dsh.profile.bundles,然後重啓 DSH。

配置入口

安裝後進入 Settings → Security & Access(安全與訪問),主要配置有四項:

  • Require password for LAN/Remote access:非 localhost 來源訪問時要求密碼,默認啓用;
  • Enforce authentication globally:對 127.0.0.1 也強制認證,可選開啓;
  • Administrator Credentials:設置或修改管理員用戶名與密碼,密碼不少於 6 個字符;
  • Active LAN IP Directory:即時列出所有監聽中的 LAN 地址,支持一鍵複製。

默認策略是隻對非 localhost 來源強制密碼認證;如果本機也要走認證,需要額外開啓全局認證選項。

反向代理部署

README 裏有一節「5 Essential Reverse Proxy Settings」,針對 Nginx / Caddy / Cloudflare 部署共給出 5 項設置。其中第 1 項是調大 Nginx 的 client_max_body_size:Nginx 默認 1MB,會以 413 拒絕圖片和文件上傳。其餘設置項請直接查看倉庫 README 的對應章節。

適用場景與注意事項

適合誰:

  • 需要在手機/平板上通過局域網訪問 DSH Web GUI 的開發者;
  • 把 DSH 部署在雲服務器、需要公網訪問的場景;
  • 局域網環境不完全可信、希望對未認證請求默認拒絕的團隊。

注意事項:

1、插件默認只攔非 localhost 來源,127.0.0.1 需要手動開啓全局認證;
2、密碼最少 6 個字符;修改密碼後所有已發令牌立即失效,活躍的遠程終端連接也會被終止;
3、插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證(本項目爲 MIT);
4、運行環境要求 Node.js >= 20。

結尾

回顧一下:把 DSH 開放到局域網或公網,需要解決認證、防僞造、限流和移動端兼容這幾件事,dsh-plugin-auth-guard 把它們打包成了一個可直接安裝的 bundle,並在 TCP 層以默認拒絕的方式兜底。

  • 倉庫地址:https://github.com/lijx122/dsh-plugin-auth-guard
  • 社區目錄頁:https://www.skillhub.cn/plugins/lijx122/dsh-plugin-auth-guard (目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

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

小夜