dsh-web-startup-auth:讓 DSH Web 界面安全暴露在局域網

前言

用 DSH(DeepSeek Harness)做智能體開發時,dsh web 會在本機啓動瀏覽器界面。若想在局域網另一臺設備上打開同一界面,需要把服務綁定到 0.0.0.0。原版 @deepseek-ai/dsh-web-app/startup 出於安全考慮會硬拒絕 --host 0.0.0.0,遠程訪問這條路被堵死。

下面介紹社區插件 dsh-web-startup-auth:它替換原版啓動器,並配套用戶名/密碼認證,使 dsh web --host 0.0.0.0 在局域網場景下可用。

這是什麼

dsh-web-startup-auth 由 GDWhisper 維護,歸類爲 DSH 社區目錄中的「聯網工具」插件。它是一個 DSH bundle:安裝後通過 cordis.patch.yml 自動補丁原版啓動邏輯,無需手動改配置文件。

一句話定位:遠程 Web 啓動 + 用戶名/密碼認證,讓 DSH 瀏覽器界面可以在非迴環接口上暴露,同時用會話保護 API。

核心功能

遠程啓動

允許使用 --host 0.0.0.0,替代原版啓動器對該參數的硬性拒絕。

登錄與註冊

首次訪問引導設置管理員賬號密碼,之後進入登錄頁;界面風格與 DSH 黑白藍主題一致。登錄後下發籤名 cookie dsh_sid(14 天有效,HttpOnly + SameSite=Lax)。

API 保護

/api/auth/*/login 外,所有 /api/* 路由及第三方插件 RPC 路由必須攜帶有效會話,否則返回 401 或拒絕握手。

設置面板

向 DSH 設置面板注入「認證」標籤頁,提供退出登錄與修改密碼。獨立入口 /api/auth/logout 可清除會話 cookie。

遠程場景修復

針對局域網 HTTP 訪問的兩個問題做了修補:

  1. crypto.randomUUID polyfill——非安全上下文下該 API 缺失會導致 RPC 失敗。
  2. 特權 API 迴環放行——DSH 將 settings.*credentials.* 等敏感域、authority: "loopback" 的第三方 RPC channel 以及 WebSocket 事件流限制爲僅迴環 Host 可訪問;認證通過後本插件以迴環身份放行。

上游兼容(dsh ≥ rc.8)

遠程瀏覽器訪問時,設置面板依賴的前端 settings mirror 原本會報 settings are unavailable in this browser。本插件通過 webServer.tapIndex 注入腳本,在 connection 插件激活時將 connection.isLoopback 覆蓋爲恆 true,使 mirror 與配置 scope 以 host 模式創建,無需刷新頁面。

安裝與啓用

本插件是 DSH bundle,package.jsondsh.bundle.patch 聲明瞭隨包分發的 cordis.patch.yml。用 dsh plugin 安裝後,包會加入 profile 的 dsh.profile.bundles,補丁層自動生效。

從 npm registry 安裝(當前版本 0.1.2):

dsh plugin --profile web add dsh-web-startup-auth@latest

從源碼安裝:

git clone https://github.com/GDWhisper/dsh-web-startup-auth
cd dsh-web-startup-auth
npm install
npm run build
dsh plugin --profile web add .

dsh plugin 是 pnpm 轉發器,--profile <name> 必填;add . 會把當前目錄以 link: 方式裝進 profile。

啓動服務:

dsh web --host 0.0.0.0

安裝時已自動應用補丁,無需再用 --patch 疊加——重複疊加會把插件再插入一遍。

典型用法

  1. 瀏覽器訪問 http://<主機IP>:<端口>/
  2. 首次訪問跳轉到 /login,顯示「設置管理員賬號密碼」註冊表單。
  3. 註冊成功後自動登錄進入主界面;之後訪問需登錄。
  4. 退出登錄或修改密碼:主界面設置面板 → 認證標籤頁。

憑據與會話密鑰保存在 ~/.dsh/web-auth.json

  • 密碼使用 scrypt(隨機鹽,64 字節)散列存儲。
  • 會話 cookie 用隨機密鑰做 HMAC-SHA256 簽名。

忘記密碼時,在服務器本機執行:

dsh --profile web auth-reset

非交互方式:

dsh --profile web auth-reset --password <新密碼>

重置會輪換會話密鑰,作廢所有已簽發的會話。兜底方案是刪除 ~/.dsh/web-auth.json 並重啓,可重新註冊(同樣作廢所有會話,但需重啓服務)。

適用場景與注意

適合誰:需要在局域網內用手機、平板或另一臺電腦訪問 DSH Web 界面的開發者;需要在可信內網共享 DSH 會話的場景。

安全邊界(來自 README 安全說明):

  • 本插件提供認證,不提供傳輸加密。明文 HTTP 下憑據與流量可被同網抓包,建議僅在可信內網使用,或在前方部署 HTTPS 反向代理。
  • 會話 14 天有效;dsh_sid 是自包含簽名 cookie,泄露後 14 天內無法單獨吊銷。auth-reset 或設置面板「修改密碼」會輪換會話密鑰,一次性作廢全部會話。
  • 憑據未設置時任何訪問者都可註冊爲管理員。在把服務暴露到不可信網絡之前,請先完成首次註冊。
  • 登錄失敗按客戶端 IP 限速:連續 5 次失敗鎖定 30 秒(純內存、無持久化);註冊要求密碼至少 8 個字符。
  • --trusted-host 僅爲與原版 CLI 兼容而保留透傳,不參與本插件認證判斷——遠程客戶端一律需要有效會話。
  • 插件以當前 dsh 進程權限運行;安裝前應檢查源碼與許可證(MIT)。

鏈接

  • 社區目錄頁:https://www.skillhub.cn/plugins/GDWhisper/dsh-web-startup-auth
  • GitHub 倉庫:https://github.com/GDWhisper/dsh-web-startup-auth
羽毛球分组比赛记分
小程序二维码

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

小夜