考虑到最近的 Log4J 漏洞 在 gradle 项目中升级传递依赖项的最安全方法是什么?我的项目没有明确使用 log4j(它使用 logback),但它有许多依赖项,带来了易受攻击的版本(< 2.15.0). First, is it necessary to upgrade anything if my SLF4J uses logback? And if I were to upgrade, how do I force 2.15 to be present in classpath instead of the older version?
将以下内容添加到您的
gradle.build
文件中:
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'org.apache.logging.log4j') {
details.useVersion '2.21.1'
details.because 'zero-day exploits suck'
}
}
}
dependencies {
…
}
请注意,正如文档指出的那样:
以下机制允许您直接编写规则 注入解析引擎。正因为如此,他们才能被看到 作为暴力解决方案,这可能会隐藏未来的问题(例如,如果新的 添加依赖项)。因此,一般建议是仅使用 如果其他手段还不够的话,可以使用以下机制。
我意识到OP要求“最安全”的方式来升级依赖项——我选择将其解释为最有可能消除零日漏洞。尽管如此,我确实认识到这种强力方法并不能保证库之间的兼容性,但这应该确保 log4j 的易受攻击版本不会出现在您的依赖树/构建中。
您当然应该在进行更改后运行
gradle dependencies
,以确保更改已生效并且没有任何存在问题的挥之不去的版本。
更新:删除了版本比较,按照建议这里。
更新:增加版本至2.21.1
您可以将依赖管理插件添加到您的 gradle.build 中:
plugins {
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
dependencyManagement {
imports {
mavenBom 'org.apache.logging.log4j:log4j-bom:2.17.0'
}
}
要确认更改,请运行
./gradlew dependencies
你应该看到类似的东西
+--- org.apache.logging.log4j:log4j-to-slf4j:2.14.1 -> 2.17.0
| | | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.32
| | | | \--- org.apache.logging.log4j:log4j-api:2.17.0