dsh-login:dsh-web 登录门禁插件

前言

DSH 采用“一切皆插件”的架构。本地开发或部署时,若直接暴露 dsh-web 端口,访问者无需认证即可操作。dsh-login 是一个纯主机侧 Cordis 插件,通过拦截请求和校验会话,为 dsh-web 提供全量请求门禁。

插件简介

  • 名称: dsh-login
  • 所有者: ravenli059
  • 类别: admin-security
  • 许可证: MIT

dsh-login 为 dsh-web 加一道登录门:打开端口时先输入用户名和密码。账号信息不落明文:密码用 scrypt(随机盐)哈希,整个凭据文件再用 AES-256-GCM 加密后写入本地配置文件($DSH_HOME/dsh-login.json,默认 ~/.dsh/dsh-login.json)。

核心功能

  1. 全量请求门禁
    包住 webserver 的 register / registerUpgrade / registerFallback:SPA 回退、/api 传输、WebSocket/SSE 升级全部先过会话校验。
  2. 会话管理
    内存会话 + HttpOnly; SameSite=Strict Cookie(默认 24h,可配置)。
  3. 加密存储
    凭据文件 AES-256-GCM 加密;密钥来自环境变量 DSH_LOGIN_SECRET(64 hex 或口令)→ 密钥文件 $DSH_HOME/dsh-login.key(自动生成)。
  4. 口令安全
    scrypt(N=2^14, r=8, p=1)随机盐哈希;用户名不存在时烧一次假哈希防枚举。
  5. 爆破防护
    每用户名+IP 滑动窗口限速(默认 5 次/30s → 429)+ 失败延时。
  6. 多用户与 CLI
    支持任意多账号,登录按用户名独立校验。自带独立 CLI (dsh-login),支持 status, set-user, list-users 等命令。

安装与启用

在本地 web profile 下执行以下命令:

# 1) 把本插件加入 web profile
dsh plugin --profile web add link:D:\code\dsh\dsh-login-plugin

# 2) 重启 dsh web
# 下次打开 http://127.0.0.1:3080 会先看到登录页;首次访问创建管理员账号。

插件通过 dsh.bundle.patch 挂载,依赖列表只有 cordis / dsh-host-webserver / schemastery 三个 peer。

配置

在 profile 的用户层给插件行加配置(dsh plugin --profile web add 后会自动把 dsh-login 行插入组合;改配置就编辑 ~/.dsh/profiles/web/cordis.patch.yml 的 - insert: 里那行 dsh-login):

- id: dsh-login
  config:
    sessionTtlHours: 12        # 会话有效期(小时),默认 24
    bootstrap: denied          # 禁止网页自助建号,只用 CLI 管账号
    maxAttempts: 10            # 爆破限速:10 次/30s

主要配置项包括 enabled、storeFile、keyFile、sessionTtlHours、cookieName、bootstrap、maxAttempts 等。主密钥优先级:环境变量 DSH_LOGIN_SECRET → 密钥文件 → 明文模式(警告)。

典型用法

登录后可访问 /accounts 进行账号管理(网页端增删改改名改密)。CLI 提供更多管理能力:

# 查看状态
dsh-login status

# 创建或重置用户
dsh-login set-user --user admin

# 列出所有用户
dsh-login list-users

运行中改账号会被 mtime 轮询热加载。

部署与安全注意

  1. 纯主机侧插件:不修改任何 dsh 源码。
  2. 网络绑定:默认只绑 127.0.0.1。
  3. 局域网/公网部署:需自行架设 nginx 服务,把服务映射到局域网内使用;建议加 TLS 反向代理并设置强口令。
  4. 密钥安全:DSH_LOGIN_SECRET 环境变量用于主密钥派生,建议配置。

目录与链接

  • 目录页: https://www.skillhub.cn/plugins/ravenli059/dsh-login
  • GitHub 仓库: https://github.com/ravenli059/dsh-login
羽毛球分组比赛记分
小程序二维码

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

小夜