🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

网页登录门禁 liyang52520/dsh-web-login

DeepSeek Harness
liyang5252036 天前有提交已提供中文文档扫描:含敏感能力

为 Web 界面加独立密码验证,拦截未授权访问

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add liyang52520/dsh-web-login
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
数据截至 2026/10/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 4 处,展示前 4 条)
  • 读取本地文件
    index.js:561
    if (!existsSync(explicit)) throw new Error(`dsh-web-login: config indexHtml ${JSON.stringify(explicit)} does not exist`);
  • 读取本地文件
    index.js:578
    const distIndex = candidates.find((candidate) => existsSync(candidate));
  • 读取本地文件
    index.js:581
    const html = await readFile(distIndex, "utf8");
  • 发起网络请求
    client.js:350
    const response = await fetch(path, {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 独立密码验证
  • 拦截未授权访问
  • 暴力破解锁定

给 DeepSeek Harness Web GUI 加密码门禁:首次运行设置、暴力破解锁定、审计日志,以及 Harness 设置里的管理页。

README

由 DeepSeek 最新模型翻译生成
dsh-web-login 中文 · English DeepSeek Harness Web GUI 的独立密码验证层。 零运行时依赖的 Cordis 插件。接管 / 与 /index.html:未通过验证的请求不会转发至 Harness,启动 token 亦不下发。Harness 自身的鉴权逻辑与 /api/* 不受影响。 登录页 特性 - 首次设置:首次访问时设置密码,以启动日志中的一次性口令校验,防止公网抢先初始化 - 登录态:「记住我」默认 30 天,否则默认 12 小时,均可配置 - 失败锁定:同一来源连续失败 5 次后锁定 300 秒,按真实客户端 IP 计数 - 审计日志:记录登录、改密、锁定与退出事件,不含密码内容 - 管理界面:集成于 Harness 设置,提供修改密码、重置密码与退出登录 - 凭据存储:密码经 scrypt 加盐哈希;登录态 Cookie 经 HMAC-SHA256 签名并绑定主机 安装 前置条件:pnpm。dsh 不内置 pnpm;缺失时安装命令以 pnpm was not found 失败,且不改动 profile。
展开完整文档(README 剩余 1 节)
dsh-web-login

中文 · English

DeepSeek Harness Web GUI 的独立密码验证层。

零运行时依赖的 Cordis 插件。接管 / 与 /index.html:未通过验证的请求不会转发至 Harness,启动 token 亦不下发。Harness 自身的鉴权逻辑与 /api/* 不受影响。

登录页

特性

- 首次设置:首次访问时设置密码,以启动日志中的一次性口令校验,防止公网抢先初始化
- 登录态:「记住我」默认 30 天,否则默认 12 小时,均可配置
- 失败锁定:同一来源连续失败 5 次后锁定 300 秒,按真实客户端 IP 计数
- 审计日志:记录登录、改密、锁定与退出事件,不含密码内容
- 管理界面:集成于 Harness 设置,提供修改密码、重置密码与退出登录
- 凭据存储:密码经 scrypt 加盐哈希;登录态 Cookie 经 HMAC-SHA256 签名并绑定主机

安装

前置条件:pnpm。dsh 不内置 pnpm;缺失时安装命令以 pnpm was not found 失败,且不改动 profile。

npm i -g pnpm
dsh plugin --profile web add git+https://github.com/liyang52520/dsh-web-login.git

本包声明 dsh.bundle,安装后由 dsh 自动注册至 dsh.profile.bundles,无需手工编辑配置。

重启 dsh 以加载插件;systemd 部署使用 systemctl restart dsh。

维护命令:

dsh plugin --profile web update dsh-web-login # 升级
dsh plugin --profile web remove dsh-web-login # 卸载

DSH_HOME 须与运行中实例一致(默认 ~/.dsh)。路径不一致时命令仍返回成功,但插件将安装至其它 profile,对当前实例不生效。

手动安装(不使用 dsh plugin)

经 pnpm 安装:

cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm add 'github:liyang52520/dsh-web-login'

grep -q web-login cordis.patch.yml 2>/dev/null || cat >> cordis.patch.yml

使用

首次设置

dsh 启动时输出一次性初始化口令:

dsh web-login: setup-token: 7rJfiimRBtBZbZZqbEY3_O6VBO3Te-bA

检索方式依部署而定:systemd 使用 journalctl -u dsh,前台运行见终端输出,容器使用 docker logs。

访问站点,输入该口令并设置密码。

管理界面

登录后进入 Harness 的 设置 → 登录门禁:

设置页

| 操作 | 说明 |
| 修改密码 | 验证当前密码后设置新密码;轮换签名密钥,其它设备登录态失效 |
| 重置密码 | 删除密码记录,所有设备需重新执行首次设置 |
| 退出登录 | 仅清除当前设备的登录态 |

界面配色跟随 Harness 的主题设置。

深色主题

配置

配置项写入 profile 的 cordis.patch.yml: yaml
- id: web-login
config:
title: 我的 Harness rememberDays: 7

config 为整体替换;未列出的键使用默认值。

| 键 | 默认值 | 说明 |
| enabled | true | 设为 false 时不接管任何路由 |
| title | "DeepSeek Harness" | 页面标题与登录页标题 |
| passwordMinLength | 8 | 密码最短长度 |
| rememberDays | 30 | 勾选「记住我」时的登录态天数 |
| sessionHours | 12 | 未勾选时的登录态小时数 |
| maxFailures | 5 | 连续失败多少次后锁定 |
| lockoutSeconds | 300 | 锁定时长(秒) |
| clientIpHeader | "x-real-ip" | 用于获取真实客户端 IP 的请求头,决定限流计数对象 |
| allowLoopbackSetup | false | 允许回环地址在无初始化口令的情况下设置密码 |
| indexHtml | "" | 手动指定前端 index.html 路径 |
| unlockRemoteSettings | true | 允许远程浏览器修改设置,参见「设置页只读」 |
| pageTheme | "auto" | 登录页配色:auto / light / dark |

排障

登录成功,接口返回 403

Harness 的 Host/Origin 校验不包含访问所使用的主机名。插件首次检测到该情况时,将在输出中给出所需配置,并在页面显示 Harness 实际收到的 Host:

dsh web-login: 1) 给 dsh 声明这个主机:--trusted-host harness.example
dsh web-login: 2) 让反向代理透传真实 Host 与 Origin:
dsh web-login: proxy_set_header Host $http_host;
dsh web-login: proxy_set_header Origin $http_origin;

第 1 步为必需;第 2 步仅适用于经反向代理访问的场景。

设置页只读,提示 settings are unavailable in this browser

Harness 仅允许本机浏览器修改设置。经回环地址或 SSH 隧道访问属本机;经反向代理自公网访问则不属,此时设置页只读并显示上述提示,页面顶部的欢迎说明亦会在每次刷新后重新出现。

本插件默认将已通过密码验证的远程浏览器视为本机(unlockRemoteSettings: true),设置页可正常使用。如不需该行为,设为 false。

忘记密码

停止服务,删除 $DSH_HOME/.credentials.yaml 中的 dsh-web-login/state 段,重启后重新执行首次设置: yaml dsh-web-login/state: # 连同下方内容一并删除 kind: grant payload: version: 1 algorithm: scrypt

审计日志

审计记录输出至 dsh 的标准输出,每行以 dsh web-login: audit 开头。systemd 部署下: bash journalctl -u dsh --no-pager | grep 'dsh web-login: audit'

事件类型:password-set、login-ok、login-failed、password-changed、password-change-failed、password-reset、reset-failed、setup-token-failed、lockout、logout、fence-rejected、api-cross-origin-rejected。失败事件附带累计次数。

安全说明

可防御:扫描器、僵尸网络,以及获取 URL 但不在网络链路上的第三方。此类访问仅能看到登录页,且无法调用 /api。

不可防御链路上的窃听者:明文 HTTP 下密码与 Cookie 均以明文传输,属协议固有限制,非本插件所致。条件允许时应以 SSH 隧道替代直接暴露端口,且无需域名与证书: bash ssh -N -L 3080:127.0.0.1:3080 user@ 本地访问 http://127.0.0.1:3080/

此时端口未对公网开放,本插件仍正常工作。其它已知边界:

- 密码经 scrypt(N=16384, r=8, p=1)加盐哈希,存储于 $DSH_HOME/.credentials.yaml,权限 0600
- 登录态 Cookie 经 HMAC-SHA256 签名并绑定访问所使用的主机,换用其它主机名访问或伪造 Cookie 均无效
- 限流记录保存于内存,重启后清零;可防御单来源暴力破解,不防御分布式慢速爆破,但所有失败均写入审计日志
- 修改密码将轮换签名密钥,其它设备登录态随即失效
- 插件拥有宿主进程的完整权限,请仅使用经过审阅的版本

开发 bash
npm test # node:test,零依赖

覆盖密码哈希与校验、Cookie 签名(重放、篡改、跨主机、过期)、限流与锁定隔离、主机名归一化、配置校验,以及浏览器半边的模块封装、slot 注册与渲染结果。

浏览器半边 client.js 为手写的 window.__ModuleLoader__.load 封装,无需打包器,运行时仅 require("react")。

兼容性

| dsh 版本 | 状态 |
| 0.2.0-rc.2 | 线上验证(Linux + nginx) |
| 0.1.2-rc.1 | 开发与测试(macOS) |

依赖的 Harness 公开 Service 为 connection.authorizeIndex()、connection.authenticatedUrl()、connection.requestRejection(),以及 webServer 的 exact 路由注册与 credentials 的记录读写。

License

MIT © liyang52520
预览分享卡片长什么样 ↓liyang52520/dsh-web-login
分享 · DeepSeek Harness Hub
liyang52520/dsh-web-login

为 Web 界面加独立密码验证,拦截未授权访问

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部