dsh-password-gate 0.1.0(安全修复版)
为 DeepSeek Harness Web 提供密码登录门禁的 Cordis 插件(host-only,零构建、零运行时依赖)。
本版为安全审查修复后的重新发布(原 0.1.0 已撤回)。
功能
- 真实请求拦截:网关独占对外端口,每个 HTTP 请求与 WebSocket 升级先过认证检查——未认证
/api/*返回 401、页面类路径 302 到登录页、WS 握手拒绝;内部 webserver 由 bundle patch 钉在回环端口,网关是唯一入口 - 密码流程:首次打开设置密码 → 登录 → 修改密码(
/login,已登录时直接显示改密表单)→ 登出 - 密码策略:至少 8 位 +(大小写混合 或 特殊字符),服务端强制 + 前端即时反馈,全部可配置
- 多层防爆破:per-IP 失败锁定(5 次/5 分钟)+ 全局速率限制(60 次/分钟,防多 IP 轮换);scrypt 在 libuv 线程池异步执行,登录洪峰不阻塞事件循环、不影响已登录用户
- 爆破提醒:锁触发/限流耗尽时
ctx.logger.warn告警 +ctx.emit('dsh-password-gate/brute-force', payload)事件(JSON 安全负载,每锁定/窗口一次),符合 dsh 插件规范 - 会话:scrypt 哈希存储、内存 256-bit token(30 天)、HttpOnly + SameSite=Strict cookie、改密吊销全部会话
- 安全适配:
crypto.randomUUIDpolyfill(明文 LAN 访问兼容)、转发时 Host/Origin 改写为回环 + 请求目标规范化(绝对形式 URI → origin-form) - 运维:
dsh plugin --profile web add一步安装(自带dsh.bundlepatch)、dsh-password-gate-uninstall/-reset命令
安装
dsh plugin --profile web add dsh-password-gate # 或 file: 本地路径
dsh web # 打开 http://<host>:3080验证
- 48 个单元/契约测试(node:test),含安全契约回归:DNS-rebinding/跨站请求无会话 cookie 到不了上游、伪造 cookie 拒绝、绝对 URI 规范化、异步 scrypt、限流与锁定事件
- 实机端到端 E2E(Playwright)
- 详见 README 与 docs/PROPOSAL.md
已知限制(MVP)
本机用户可直连内部端口(本机可信模型);明文 HTTP(LAN 部署建议可信网络或前置 TLS);无分布式/换 IP 绕过全局限速的防护;内存会话重启即下线。