安全态势衡量可见的安全卫生状况,以 OpenSSF Scorecard 为支撑—— 由 Open Source Security Foundation 维护的中立、版本化、与工具无关的安全标准。它提供安全类别的基础值,该类别占 总健康指数 16%;高风险司法辖区暴露只能通过公开政策乘数降低该值。
- 类别:安全(乘数前的基础值)
- 在总指数中的权重:司法辖区政策调整前 16%
- 指标键名:
security_posture
数值如何计算
每项 Scorecard 检查成为一个组成部分,按 Scorecard 自身的风险级别加权:
| Scorecard 风险级别 | 组成部分权重 |
|---|---|
| Critical | 10 |
| High | 7.5 |
| Medium | 5 |
| Low | 2.5 |
因此汇总后的 1–100 数值跟随 Scorecard 的 0–10 聚合得分(value ≈ aggregate × 10)。Scorecard 报告为无法判定的检查—— 例如没有管理员令牌时的 Branch-Protection——会被排除并重新归一化,绝不按零计入。正是这条规则使运作良好、但使用非 GitHub 工具链的项目不至于读数接近零;它记录于 方法论版本(0.6.0)。
每份报告都呈现完整的逐项检查明细——每项检查的得分、判定理由,以及指向 Scorecard 文档的链接。
共享证据
安全类别保留完整的风险加权 Scorecard 结果。其中七项检查同时为其他健康维度提供实证。六项在相应位置提供小型、单独加权的 OpenSSF Scorecard: … 组成部分:Maintained、Signed-Releases、 Contributors、Code-Review、CI-Tests 与 Pinned-Dependencies。第七项 License 是社区健康中唯一的许可证信号——在那里以通用名称 License 显示,当无 Scorecard 可用时回退到 GitHub 的社区档案。这是有意设计的跨类别影响,而非对 Scorecard 安全风险权重的重复使用。无法判定(n/a)的检查在所有位置均被排除。
这些检查奖励什么
奖励实践本身,绝不奖励某家厂商的配置文件:
- 依赖更新自动化——Dependabot、Renovate 或任何被认可的工具。
- 静态分析(SAST)——CodeQL、Semgrep 或同等工具。
- 无已知存在漏洞的依赖——风险级别最高的检查。
- 最小权限的工作流令牌、锁定的依赖、签名发布、 安全策略,等等。
回退路径
运行 Scorecard 需要其 CLI;当其不可用时,该指标回退到粗粒度的文件树信号,且报告明确标注数据来源(inputs.source == "file_signals"):
| 回退组成部分 | 权重 | 备注 |
|---|---|---|
| 安全策略(SECURITY.md) | 30 | |
| Dependabot 配置 | 25 | |
| 依赖锁定文件 | 25 | 仅适用于应用程序——类库按惯例发布时不提交锁定文件,因此对类库排除此项检查(参见 0.9.0) |
| CodeQL 工作流 | 20 |
如何解读结果
- 将聚合得分与逐项检查表对照:一个中等数值若源于某项 critical 检查失败,与各项普遍平庸是截然不同的情形。
n/a行表示无法判定的检查——被排除,而非未通过。
提升数值
- 发布
SECURITY.md,启用自动依赖更新,并添加 SAST 工作流。 - 优先解决已知存在漏洞的依赖——风险权重最高,现实收益也最高。
- 为 CI 工作流设置明确的最小权限,并锁定第三方 actions。