依赖安全性校验 (Checksums)
源:验证依赖项的签名
在大型商业项目中,安全性至关重要。你如何确保从公共 Maven 仓库下载的 okhttp 或 retrofit 真的就是作者发布的那个,而不是中间人攻击后被替换的恶意版本?
1. 什么是依赖校验?
Gradle 允许你为每个依赖项锁定一个哈希值 (Checksum) 或 数字签名。如果仓库中的库文件发生了哪怕 1 字节的变化,构建将立即失败。
2. 开启校验
运行以下命令,Gradle 会自动扫描项目当前的依赖,并生成一份基准校验文件:
bash
./gradlew --write-verification-metadata sha256 help此命令会生成:gradle/verification-metadata.xml。
3. 校验文件的作用
该 XML 文件记录了所有依赖项的“身份证”。
xml
<verification-metadata>
<components>
<component group="com.squareup.okhttp3" name="okhttp" version="4.9.0">
<artifact name="okhttp-4.9.0.jar">
<sha256 value="...哈希值..."/>
</artifact>
</component>
</components>
</verification-metadata>4. 专家级工作流
- 提交校验文件: 将
verification-metadata.xml提交到 Git。 - 强制校验: 任何人更新了依赖版本,如果没有同步更新校验文件,构建将无法通过。
- 防止投毒: 这能从根本上杜绝恶意库文件替换攻击。
性能影响
开启校验会略微增加首次下载依赖时的计算耗时,但对于编译过程几乎没有性能影响。