dshlib 收录与验证标准
图书馆收录什么、怎么验证、认证等级如何判定——全部公开,接受社区监督与复核。
定位:社区实验项目,非官方。我们做的是"内容完整性 + 结构验证"(可验证的事实),不是"安全审查"(需要人工判断威胁)。
一、收录标准(什么能上架)
| 条件 | 说明 |
| 1. DSH 插件/技能 | npm 包或 GitHub 仓库,含 dsh.bundle / dsh.profile 声明,或 cordis.patch.yml |
| 2. 来源可溯 | npm 包名或 GitHub owner/repo 可解析 |
| 3. 内容指纹可验 | npm:dist.integrity(sha512 官方哈希);git:结构验证 + 内容指纹 |
| 4. 非恶意声明 | 作者提交时确认非恶意;发现恶意(投毒/窃密/外传)立即下架 |
二、验证方法(透明公开)
npm 来源
- 内容完整性:拉取 npm tarball → 计算 sha512 → 与 npm 官方
dist.integrity 比对一致
- 结构验证:包内
package.json 的 dsh.bundle/dsh.profile 声明,或 cordis.patch.yml 存在
git 来源
- 结构验证:main/master 分支存在
package.json(含 dsh 声明)或 cordis.patch.yml
- 内容指纹:基于包清单的内容哈希
工具:verify_evidence.py(深度验证)、batch_l1.py(L1 批量)、process_queue.py(提交队列)——脚本与规则开源。
三、认证等级判定(CHA2A)
| 徽章 | 等级 | 判定依据 | 谁来做 |
 | L0 未认证 | 无声明(默认) | — |
 | L1 完整性 | 内容指纹(npm integrity / contentIdentity) | 自动 |
 | L2 来源 | L1 + 作者署名 | 自动(npm metadata) |
 | L3 发行 | L2 + 发行方/验证方背书(真实验证证据) | dshlib 验证 |
 | L4 生态 | L3 + ≥2 独立验证方(邀请制交叉验证) | 多验证方 |
递进不跳级:L4 必须在 L3 基础上达成(多验证方是叠加独立验证,不替代 L2/L3)。等级以 cha2a registry 实际判定为准,catalog 展示自动同步(一致性校验)。
四、边界声明
- 不是安全审查:验证保证"装的是发布的"(完整性),不保证"代码无恶意"——安装前请自行判断(尤其涉及凭据/网络/文件系统的插件)
- Awesome 收录 ≠ 认证:awesome-dsh-plugin 社区列表收录是推荐信号,非我们的验证
- 认证 ≠ 无依赖漏洞:认证覆盖插件包本身(内容完整性/来源/发行/生态),不覆盖依赖树安全——依赖已知漏洞以 OSV.dev 单独标注(卡片“依赖 N 漏洞”标签),两者正交:L4 认证的插件也可能有依赖漏洞,需按漏洞标签评估
- 不替用户做排名:收录/验证结果不代表质量排名,也不构成安全背书——L0-L4 是证据等级(验证到什么程度),不是质量评分;同等证据等级下我们不做优劣比较
- 扫描结论有有效期:插件或运行时更新后,旧的扫描/验证结论可能过期——报告页标注扫描日期,超 30 天标注“待复核”,安装前请以最新结论为准
- 命中分级:自研扫描命中分两类——安全信号类(硬编码密钥/危险命令/数据外传/越权能力)是提示,需人工判断(正则无法可靠确认恶意,扫描从不自动判“危险”);结构契约类(重复 loader id / 双 YAML 根节点 / 入口文件缺失)是客观问题,插件装了可能起不来,需作者修复。两者都在报告页独立分类展示
- 等级会变:验证证据更新/撤销时等级相应变化(徽章 1 分钟内刷新)
五、监督与申诉
- 发现错误标注/恶意插件:提交到 上架申请 或讨论区 #3192
- 作者申诉:通过提交表单注明"申诉"
- 验证结果独立复核:邀请第三方验证方交叉验证(L4 机制)
六、数据来源
- GitHub topic:dsh-plugin(官方发现机制)+ 逐仓特征验证
- dsh-subscribe L1 预研(社区合作)
- dshlib 真实验证(verify_evidence)