依赖固定
依赖固定 是什么?
依赖固定把软件依赖以精确版本进行声明,通常结合加密哈希,使构建始终消费同一批工件并抵御供应链篡改的实践。
依赖固定将宽松的版本范围(如 "^1.0.0")替换为精确版本,并尽量在锁文件(package-lock.json、poetry.lock、Pipfile.lock、Gemfile.lock、go.sum、Cargo.lock)中携带加密哈希。这样构建就具备可复现性,并能抵御静默升级、依赖混淆、typosquatting 和被篡改版本。现代实践还会把 GitHub Actions 及其他 CI 插件固定到 commit SHA 而非可变 tag。固定必须与主动的漏洞监控(SCA、Dependabot、Renovate)结合,确保补丁仍能流转,否则应用会陈旧并积累 CVE。SLSA、NIST SSDF、OWASP 以及可复现构建倡议都把哈希固定列为关键控制项。
● 示例
- 01
把所有第三方 GitHub Actions 固定到 commit SHA,而不是 v3 这种可变 tag。
- 02
在 CI 中使用 pip --require-hashes,搭配全部带哈希的 requirements.txt。
● 常见问题
依赖固定 是什么?
把软件依赖以精确版本进行声明,通常结合加密哈希,使构建始终消费同一批工件并抵御供应链篡改的实践。 它属于网络安全的 应用安全 分类。
依赖固定 是什么意思?
把软件依赖以精确版本进行声明,通常结合加密哈希,使构建始终消费同一批工件并抵御供应链篡改的实践。
依赖固定 是如何工作的?
依赖固定将宽松的版本范围(如 "^1.0.0")替换为精确版本,并尽量在锁文件(package-lock.json、poetry.lock、Pipfile.lock、Gemfile.lock、go.sum、Cargo.lock)中携带加密哈希。这样构建就具备可复现性,并能抵御静默升级、依赖混淆、typosquatting 和被篡改版本。现代实践还会把 GitHub Actions 及其他 CI 插件固定到 commit SHA 而非可变 tag。固定必须与主动的漏洞监控(SCA、Dependabot、Renovate)结合,确保补丁仍能流转,否则应用会陈旧并积累 CVE。SLSA、NIST SSDF、OWASP 以及可复现构建倡议都把哈希固定列为关键控制项。
如何防御 依赖固定?
针对 依赖固定 的防御通常结合技术控制与运营实践,详见上方完整定义。
依赖固定 还有哪些其他名称?
常见的别称包括: 版本固定, 哈希固定。
● 相关术语
- appsec№ 1069
软件供应链安全
保护软件生产链中每一个环节——源代码、依赖、构建、签名、分发与部署——使其免受篡改、恶意代码与完整性破坏的学科。
- appsec№ 304
依赖混淆攻击
供应链攻击的一种,攻击者在公共注册中心发布与组织内部依赖同名的恶意包,诱使构建工具拉取公共版本。
- appsec№ 971
SCA(软件成分分析)
对应用使用的开源与第三方组件进行自动化分析,识别已知漏洞、许可证风险以及过时或高风险依赖。
- appsec№ 921
可复现构建
通过特定的构建实践,使同一份源代码在同一构建指令下,无论何时何地构建都能产生比特位一致的工件。
- appsec№ 166
CI/CD 安全
保护持续集成与持续交付流水线,防止其被入侵、被注入恶意代码、机密泄露与未授权部署的一整套控制。
- appsec№ 784
软件包签名
对软件包进行加密签名,使使用者能够验证发布者身份并确认工件在发布后未被篡改。