6.1 依赖政策 (Dependency Policy)
原则
1. 最小化原则
仅使用产品功能所必需的依赖项。不必要的依赖项会增加攻击面 (Attack Surface)。
2. 可信性
依赖项必须来自可信来源且处于积极维护状态。
3. 许可证合规
仅使用具有兼容许可证的依赖项。
4. 版本管理
依赖项必须固定到特定版本(禁止使用 latest、禁止使用范围)。
允许的许可证
| 许可证 | 状态 |
|---|---|
| MIT | ✅ 允许 |
| Apache-2.0 | ✅ 允许 |
| BSD-2-Clause | ✅ 允许 |
| BSD-3-Clause | ✅ 允许 |
| ISC | ✅ 允许 |
| CC0-1.0 | ✅ 允许 |
| Unlicense | ✅ 允许 |
| MPL-2.0 | ⚠️ 需审查 |
禁止的许可证
| 许可证 | 状态 | 原因 |
|---|---|---|
| GPL-2.0 | ❌ 禁止 | Copyleft — 可能影响专有代码 |
| GPL-3.0 | ❌ 禁止 | 强 Copyleft |
| AGPL-3.0 | ❌ 禁止 | 网络 Copyleft |
| SSPL | ❌ 禁止 | 服务端 Copyleft |
| EUPL(未审查) | ⚠️ 审查 | 需进行兼容性审查 |
许可证合规检查通过 modules-license-compliance.yml 自动执行。
新依赖项的评估标准
采纳新依赖项之前:
| 标准 | 最低要求 |
|---|---|
| 维护状况 | 最近一次提交 < 6 个月 |
| 社区 | >100 GitHub Stars 或已建立的项目 |
| 安全历史 | 无未解决的 CRITICAL CVE |
| 许可证 | 在允许列表中 |
| 传递依赖 | 无已知风险 |
| 维护者 | 可识别身份,非匿名临时账户 |
自动化执行
CI/CD 流水线
yaml
# 每个 PR 都会检查:
- Security Scan (Trivy/Grype) → 存在 CRITICAL 时阻止
- License Compliance → 存在禁止的许可证时阻止
- Dependabot Alerts → 新漏洞的信息通知Dependabot 配置
- 每周检查所有生态系统
- 为安全更新自动创建 PR
- 可信软件包的补丁更新自动合并
供应链攻击处理流程
如怀疑存在被入侵的依赖项(依赖混淆 (Dependency Confusion)、域名仿冒 (Typosquatting)、维护者接管 (Maintainer Takeover)):
- 立即: 在所有项目中识别受影响的依赖项(SBOM 搜索)
- 4 小时内: 将依赖项固定到安全版本或移除
- 24 小时内: 验证被入侵的版本是否曾部署到生产环境
- 如已被入侵: 启动事件响应手册