dsh-auth-cookie-guard

DSH PLUGIN安全与权限

仓库 jitianjiyan/dsh-auth-cookie-guard · npm dsh-auth-cookie-guard

安全与权限 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

为 DSH 桌面版修复启动 cookie 累积导致的 431 认证锁死:提升监听器头部预算并退休旧启动 cookie,让欢迎握手恢复可用。

一句话选型结论

按资料字段整理

dsh-auth-cookie-guard 是安全与权限类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,列出 4 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类安全与权限 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 44 复刻 2 · 未关闭 issue 1
最近更新 2026-10-31 创建于 2026-10-30
README 8.9 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add dsh-auth-cookie-guard
  1. 1
    确认版本与运行环境

    兼容的 DSH 版本为 0.2.2-rc.1 等 3 个,Node.js 要求 ^22.19.0 || >=24.0.0;版本不匹配时安装会报错。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本0.2.2-rc.1 等 3 个版本版本不匹配时安装会报错
Node.js 要求^22.19.0 || >=24.0.0来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名dsh-auth-cookie-guard可用 npm view 查看包信息

能做什么

4 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-auth-cookie-guard:为 DeepSeek Harness 桌面端解除启动握手锁死

  • 提升监听器头部预算至 64 KiB
  • 退休旧启动 cookie 保留最新几条
  • 只读 cookie 名与顺序不解码值
  • 卸载时自动还原原始预算

适用场景

存储

上游标签

dsh-plugin

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-11-13): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 结论说明 静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。
  • 风险计数 严重 0 / 高 0

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.2.2-rc.1 等 3 个),按版本装不容易报错。
  • 列出了 4 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在安全与权限场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-auth-cookie-guard当前 L5 · 运行验证通过 低风险 44 0.2.2-rc.1 等 3 个 有
dsh-infinite-gen-4 未做沙盒验证 未标注 1,611 未标注 无
cc-safety-net 未做沙盒验证 未标注 1,591 未标注 无
dsh-wallpaper-engine L5 · 运行验证通过 低风险 1,018 0.2.0-rc.2 等 10 个 有
api-relay-audit L5 · 运行验证通过 低风险 875 0.2.0-rc.2 等 10 个 有
hol-guard L4 · 沙盒安装通过 不在扫描口径 828 未标注 有

仓库档案

安全与权限
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方jitianjiyan仓库 dsh-auth-cookie-guard · 默认分支 main
分类安全与权限security
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue44 / 2 / 1收录时的数值,非实时
创建 / 更新2026-10-30 · 2026-10-31最后推送 2026-10-31
本站收录2026-10-31首次进入本站目录的时间

README 全文

8.9 KB
作者原文,中文版优先;只做安全转义,不改内容

启动 Cookie 守护(dsh-auth-cookie-guard)

修复 DSH 桌面版「固定 profile 启动约 72 次后永久报 desktop welcome: Web authentication failed」的问题。

症状

  • 固定 profile(固定 userData)连续启动约 72 次之后,桌面端再也进不去,日志里是 desktop welcome: Web authentication failed(app.asar/lib/main.js:8886 的 connectDesktopWelcome)。
  • 重启、撤销授权、重装都无效,只有换掉整个 profile(也就是换掉 Chromium 的 cookie 库)才能恢复。

根因

  1. Host 每次启动都绑定随机端口;浏览器会话 cookie 按授权方命名:
    dsh-auth-(dsh-client-connection/lib/index.js:277、:335-337)。
  2. 浏览器按域名存 cookie,端口不进键。于是每启动一次,127.0.0.1 上就多一条约 173 字符、Max-Age 30 天的持久 cookie,且没有任何代码删除它们。
  3. Host 建监听器时没有覆盖头部预算——createServer(listener)(dsh-host-webserver/lib/index.js:412)——因此沿用 Node 默认的 maxHeaderSize = 16384 字节。
  4. 第 71 条累积后 Cookie 头约 16184 字节,本轮再下发 1 条即约 16411 字节,超过 16384,Node 直接返回 431;客户端把它当成认证失败。此后每次启动都超过上限,而 431 的请求根本到不了应用层,也就没有任何机会清理——故障是纯累积型且不可自愈的。

插件做了什么

两层防护,缺一不可:

层 行为 默认值
头部预算 在 webServer 服务就绪后把 server.maxHeaderSize 提升到 64 KiB maxHeaderBytes: 65536
退休旧 cookie 每个请求只读取 Cookie 头里的名字(必须是 dsh-auth-<43 位 base64url>);按浏览器发送顺序(旧→新)保留最后 keep 条 + 当前端口那一条,其余用 Max-Age=0; Path=/ 从浏览器 jar 删除(每个响应最多 96 条,约 12 KiB) keep: 4

几点设计取舍:

  • 为什么两层都要:只提升预算,约 350 次启动后依旧会撞墙(只是把 72 次变成 350 次);只清理而不提升预算,则清理逻辑永远跑不到——431 在 Node 的 HTTP 解析层就被拒了,请求不会进入监听器。
  • 为什么只读名字、不解码 cookie 值:cookie 值是 DSH 的签名会话载荷(authority/issuedAt/expiresAt)。这些 cookie 都是 Path=/,浏览器按创建时间从旧到新发送(RFC 6265 §5.4),所以位置本身就能排出新旧;名字足够定位,值既不参与认证判断,也不再被解析、记录或使用。
  • 为什么保留当前端口那条:即使 keep 配得很小、或系统时钟回拨,也不会把正在使用的那条 cookie 删掉。
  • 为什么用 Max-Age=0 而不是改名或重写:cookie 名与端口/协议绑定(requestAudience),改名会让认证查不到;重签名需要密钥。删除是唯一不改变语义的收敛方式。
  • 对异常格式零影响:只匹配 dsh-auth- + 43 位 base64url 的精确形状;cookie 值里带什么(包括伪造的 issuedAt)都不影响保留/删除结果。若未来 cookie 名字格式变化,退化结果是「预算提升、不再清理」,而不是破坏会话。
  • 不会越界:只处理 webServer 自己的局域网/本机监听器;其它 profile 的 host 有独立 cookie 库,互不影响。
  • 为什么单响应最多删 96 条:删除行长度由固定名字形状决定(约 125 字节/条),96 条约 12 KiB,留在 Node HTTP 客户端默认 16 KiB 响应头预算之内——实测 128 条(约 16 KiB)会让 fetch 解码握手直接失败。更大的 jar 不会丢清理,只是在后续请求里分批删完,绝不会用一条超大的响应头去赌客户端容忍度。
  • 64 KiB 为什么够:Chromium 对单域名有条数上限(180 条),每条 minted cookie 约 173 字符,理论上限约 33 KB,已经落在 64 KiB 之内。即使一个已经被锁死的 jar 条数拉满,也能在第一次握手时被放行,并当场收敛。

安全边界

  • 只看请求自己的 cookie:插件在 Host 进程内只能看到发往本监听的请求所携带的 Cookie,也就是请求者自己浏览器的那一份;不跨用户、不读取磁盘上的其他 cookie 库。
  • 只读名字与顺序:从 1.0.4 起不解码 cookie 值、不记录任何 cookie 名字或值;整个包只 import node:crypto,没有网络、文件、子进程调用。回归测试里有一例专门守着「名字和值不进日志」。
  • 不参与认证:它从不改写、重签或保留认证凭据,也不做登录判断;删除指令只是把请求者自己 jar 里本次实例不再用的启动 cookie 清掉,认证仍由 DSH 自己的签名校验负责。
  • 头部预算的副作用:默认把监听器的 maxHeaderSize 提到 64 KiB。默认回环监听下这只影响本机;如果把 DSH 绑到回环之外,远端请求可以多占每连接头部内存——对外暴露时应加反向代理/访问控制,或把 maxHeaderBytes 调低。
  • 同 host 多实例:浏览器 cookie 按 host 共享,插件会退休「最新 keep 条 + 当前端口」之外的启动 cookie;同一份 profile 同时跑多个实例时,较旧实例的登录可能被清理,需要重新走一次欢迎页握手。当前实例自己的 cookie 始终保留。

配置

在 profile 的 patch 层给这一行加 config 即可(maxHeaderBytes 会被夹到 16 KiB–1 MiB,keep 到 1–64):

- id: auth-cookie-guard
name: dsh-auth-cookie-guard
config:
maxHeaderBytes: 131072
keep: 4

一般不需要改。若某台机器上 cookie 已经多到超过 64 KiB(约 350 次启动),把 maxHeaderBytes 临时调到 262144,启动一次让清理跑完,再调回默认值即可。

安装与卸载

  • 安装:在 DSH 插件页填入 dsh-auth-cookie-guard 安装(或执行 dsh plugin add dsh-auth-cookie-guard)。工具会把它写进 profile 的 package.json(dsh.profile.bundles 与 npm 依赖);本 bundle 自带的 cordis.patch.yml 作为独立层插入那一行,profile 自己的 cordis.patch.yml 不需要任何改动。不要手改 profile 文件。
  • 生效方式:安装时宿主会重载组合,插件当场 apply,无需重启桌面端;之后每次启动同样自动生效。
  • 卸载:在插件管理中移除该 bundle,重启桌面端;卸载后会恢复监听器的原始头部预算(插件在 dispose 时还原)。
  • 本插件只有 Host 端,没有浏览器端资源,也没有 service / tool / event。
  • 开发时也可以直接安装本仓库源码目录(工具会以 link: 方式引入),发布版走 npm 包 dsh-auth-cookie-guard。

验证

用一个真实的 node:http 服务器模拟 71 条旧 cookie + 本轮 1 条(构造方式与报告一致):

cookie header bytes: 16414
BEFORE: {"status":431}                       # 安装前:与线上故障同因
[info] auth-cookie-guard: listener header budget 65536 bytes, keeping 4 launch cookie(s)
[info] auth-cookie-guard: retired 68 launch cookie(s), kept 4
AFTER: status 200 deletions 68               # 安装后:握手通过,并当场清掉 68 条
kept names: 4 (current kept)                 # 最新 4 条保留,当前端口那一条保留
maxHeaderSize now: 65536
AFTER PRUNE: 200 deletions 0                 # 第二次请求不再产生删除头(幂等)
maxHeaderSize restored: undefined            # dispose 后还原

线上验证(对本机已安装、正在运行的宿主直接探测,插件安装后即时生效):

big header 20KB:  {"status":401}            # 提升预算前这里是 431
71 cookies:       401 deletions: 68         # 当场退休 68 条,保留最新 4 条

第一行说明请求已经进入应用层(401 是未认证的正常响应,而不是 Node 在解析层回的 431),即 maxHeaderSize 已抬到 64 KiB;第二行说明裁剪逻辑在真实请求上生效。宿主日志同时会打印
auth-cookie-guard: listener header budget 65536 bytes, keeping 4 launch cookie(s) 与
auth-cookie-guard: retired N launch cookie(s), kept 4,此后无论重启多少次都不再累积。

回归测试 npm test(14 例)覆盖:303 对象写头(真实握手路径)、隐式 200、三参数写头、平铺数组写头、appendHeader 多值、无清理时不包装 writeHead、64 KiB 预算下 200 条 cookie(约 19 KiB)仍能握手、400 条 jar 分 5 轮各 ≤96 条收敛且客户端不报错、按顺序而非 cookie 值排序、名字和值不进日志——旧实现会在 303 上丢掉全部删除指令,128 条的上限也会让 fetch 解码失败。

环境

Windows 11、DSH 0.2.1-rc.3、Electron 44.7.0、Node 24.21.0(本机复现用 Node 24.18.0)。server.maxHeaderSize 在运行时赋值即对后续连接生效,这一点已在 Node 24 上实测(431 → 200,70000 字节 → 431)。

常见问题

9 问
答案由本站依据条目字段整理,不引用上游原文
dsh-auth-cookie-guard 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add dsh-auth-cookie-guard` 即可。对应的 npm 包名是 `dsh-auth-cookie-guard`。

dsh-auth-cookie-guard 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-auth-cookie-guard 安全吗?

低风险。静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。

dsh-auth-cookie-guard 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-auth-cookie-guard 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.2-rc.1、0.2.1-rc.5、0.2.1-rc.3。

dsh-auth-cookie-guard 需要什么运行环境?

Node.js ^22.19.0 || >=24.0.0。环境不满足时安装会失败,建议先确认本机版本。

dsh-auth-cookie-guard 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-auth-cookie-guard 有哪些功能?

提升监听器头部预算至 64 KiB、退休旧启动 cookie 保留最新几条、只读 cookie 名与顺序不解码值、卸载时自动还原原始预算。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

2 条
不同作者的仓库分开列,请确认你要装的是哪一个
安全与权限
按星标排序,可作替代方案

dsh-infinite-gen-4

dsh-infinite-gen-4

DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投

未标注验证等级 1,611 星

cc-safety-net

cc-safety-net

为 DeepSeek Harness 等编码 CLI 提供执行前防护,在工具调用前拦截破坏性 Git 与文件系统命令,并阻止读取 SSH 密

未标注验证等级 1,591 星

dsh-wallpaper-engine

dsh-wallpaper-engine

DSH plugin 将本机 Wallpaper Engine 壁纸变为网页界面背景,支持视频、网页、场景壁纸渲染,并配以 iOS 液态玻璃

L5 · 运行验证通过 1,018 星

api-relay-audit

api-relay-audit

DSH plugin 本地安全审计工具,检测 AI API 中继与 LLM 代理的提示注入、模型替换、工具调用改写、SSE 异常及 Web3

L5 · 运行验证通过 875 星

hol-guard

hol-guard

L4 · 沙盒安装通过 828 星

sandbase-harness

sandbase-harness

SandBase Harness 是本地优先的 AI Agent 运行时,提供沙箱会话、MCP 工具、记忆、凭据管理与审计回放,并内置控制台

L4 · 沙盒安装通过 708 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-11-13。