背景与价值许可证不合规会带来法律与商业风险。基于SBOM的白名单门禁与例外管理,可自动化阻断风险并保留审计证据。统一规范白名单:允许 `MIT`、`Apache-2.0`、`BSD-2-Clause`、`BSD-3-Clause`、`ISC`、`MPL-2.0`。禁止:默认不接受 `GPL-3.0`、`AGPL-3.0` 等传染性许可证。Dual License:若存在 `OR` 组合,需至少包含白名单之一。例外管理:个别组件可经审批加入例外,需记录原因与期限。核心实现SBOM与许可证门禁type SbomItem = { name: string; version: string; license: string } type Sbom = { items: SbomItem[] } const allow = new Set(['MIT','Apache-2.0','BSD-2-Clause','BSD-3-Clause','ISC','MPL-2.0']) const deny = new Set(['GPL-3.0','AGPL-3.0','LGPL-3.0']) function parseLicenses(expr: string): string[] { const s = expr.replace(/[()]/g,'') return s.split(/\s+OR\s+/i).map(x => x.trim()) } function licenseAllowed(expr: string): boolean { const list = parseLicenses(expr) for (const l of list) { if (deny.has(l)) return false } return list.some(l => allow.has(l)) } type Exception = { reason: string; until: number } type Exceptions = Map<string, Exception> // key: name@version function gate(sbom: Sbom, ex: Exceptions): { ok: boolean; violations: SbomItem[] } { const viol: SbomItem[] = [] for (const it of sbom.items) { const key = `${it.name}@${it.version}` const e = ex.get(key) if (e && Date.now() < e.until) continue if (!licenseAllowed(it.license)) viol.push(it) } return { ok: viol.length === 0, violations: viol } } 落地建议在依赖审计阶段生成SBOM并执行许可证门禁,默认拒绝传染性许可证。对确需引入的组件通过例外流程审批,限定使用期限并保留审计。在CI阻断不合规构建,并输出违规清单与整改建议。定期复核例外项,过期自动撤销并重新评估替代方案。验证清单是否生成SBOM并包含规范化SPDX许可证标识。是否按白名单/黑名单进行门禁并输出违规组件清单。例外项是否记录原因与期限并自动到期撤销。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.107007s