dsh-secure-context-fix:修復局域網 HTTP 環境下的 Web GUI 無法加載問題

前言

DeepSeek Harness (DSH) 的 Web GUI 提供了便捷的交互界面,但瀏覽器的安全策略限制了部分功能。crypto.randomUUID 僅在安全上下文(HTTPS 或 localhost)中存在。當你在局域網內通過純 HTTP 訪問 DSH(例如從手機訪問 http://192.168.x.x:3080)時,瀏覽器無法識別該函數,導致 RPC 調用崩潰。這表現爲工作區列表無法加載、目錄選擇器失效、會話無法創建,而本地 http://127.0.0.1:3080 則正常工作。

這是什麼

dsh-secure-context-fix 是一個由 Li-Mingshuang 維護的小型 DSH 插件。它通過註冊 webServer.tapIndex 變換,在 DSH bundle 代碼運行前,向 Web GUI 的 HTML 頁面注入一段腳本。該腳本提供了一個基於 crypto.getRandomValues() 的 crypto.randomUUID 實現,從而在非安全上下文(HTTP)下恢復該函數的功能。

核心功能

  • 注入 polyfill:在 DSH bundle 代碼執行前,注入 crypto.randomUUID 的實現。
  • HTTP 局域網支持:允許 Web GUI 在非 HTTPS 環境下(如 LAN HTTP)正常工作。
  • 註冊變換:通過 webServer.tapIndex 機制攔截並修改 HTML 輸出。
  • 無侵入性:無需修改官方源碼,無需構建步驟。

安裝與啓用

在包含插件包的目錄下執行以下命令安裝:

dsh plugin --profile web add ./dsh-secure-context-fix

安裝完成後,重啓 Web 配置文件以加載插件:

dsh --profile web

配置與使用

要讓 Web GUI 在局域網內被訪問,必須將服務綁定到所有網絡接口。由於 DSH CLI 默認出於安全考慮拒絕 --host 0.0.0.0,需通過配置文件進行修改。

  1. 配置綁定地址:
    在 web 配置文件中添加或修改以下 cordis.patch.yml 內容:
    # $DSH_HOME/profiles/web/cordis.patch.yml
    - id: webserver
      config:
        host: '0.0.0.0'
        port: !!js ctx.webStartup.port ?? 3080
  1. 配置防火牆:
    建議僅允許局域網子網訪問,避免直接暴露。以下 PowerShell 命令將規則限制在 192.168.0.0/24 網段:
    New-NetFirewallRule -DisplayName "dsh web 3080 (LAN)" -Direction Inbound -Protocol TCP -LocalPort 3080 -Action Allow -Profile Private -RemoteAddress 192.168.0.0/24
  1. 訪問:
    確保手機與 DSH 設備在同一 Wi-Fi 下,打開瀏覽器訪問 http://<your-LAN-IP>:3080。此時工作區列表、目錄選擇器及會話創建功能應恢復正常。

安全與注意

  • 權限風險:將 Web GUI 綁定到 0.0.0.0 會向任何能訪問該端口的人暴露遠程代碼執行級別的控制權。
  • 網絡隔離:務必使用防火牆規則限制訪問源,僅允許受信任的局域網子網訪問端口 3080。
  • 安裝來源:從 Git 倉庫安裝時,若包包含 prepare 腳本,首次安裝可能需要允許構建(此插件不包含構建步驟,故無需允許)。

結尾

這是一個臨時性的修復方案,旨在解決 GitHub 討論區反饋的問題,直到官方倉庫將 crypto.randomUUID 的調用替換爲 getRandomValues()。對於無法修改源碼的用戶,該插件提供了直接可用的解決方案。

目錄頁:dsh-secure-context-fix - SkillHub
源碼地址:dsh-secure-context-fix - GitHub

羽毛球分组比赛记分
小程序二维码

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

小夜