log4j2漏洞风靡全球
影响的版本范围:Apache Log4j 2.x <= 2.14.1
根据官方的解释需要将log4j2包的版本:升级到2.15.0。
测试使用 Springboot 2.1.5 + Gradle 6.3版本进行测试。
当时以为Springboot已经天下无敌了,完全不需要考虑,结果现实比较打脸,根据gradle的包依赖,直接中枪,版本在漏洞范围。
1. 解决方法一 (方法现阶段不可用)
升级Springboot版本,查询最新的Springboot包结构,根据Gradle包结构查询,发现最新的依赖也在漏洞范围内,可能后续Springboot更新会将这个问题改变。
2. 解决方法二 (不推荐用):
通过Gradle包的排除方式排除相应的包,但是存在一个问题,不推荐的原因也在这里,虽然系统根据排除包的方式不去引用,但是打成Jar包的时候还会存在这个包,引用环境包变了,还是会存在。下图讲解
gradle排除包写法:
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.16.0'
compile ('org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE') {
exclude group: 'org.apache.logging.log4j:log4j-to-slf4j:2.11.2'
exclude group: 'org.apache.logging.log4j:log4j-api:2.11.2'
}
我们看到包已经升级包括代码包,但只是解决你代码层面替换了版本,实际包还会存在。
打成jar包发现 包已更新,但是还是不彻底,因为jar包中的依赖还是存在,只不过没有引入,如果公司扫描包的话还是会发现这个问题,虽然你没有应用。
到这里本人想到的方式就这些,最终百度下官网看看解决办法。
3. 根据官网的方式解决办法,(本人在项目中采用第三种方式)。
Gradle:官方
maven:官方
官方地址:Log4J2 Vulnerability and Spring Boot
Maven方式:
//第一种
<properties>
<log4j2.version>2.16.0</log4j2.version>
</properties>
//第二种
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.16.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
... other dependencies including spring-boot-dependencies
</dependencies>
</dependencyManagement>
Gradle:
第一种:
ext['log4j2.version'] = '2.16.0'
第二种:
implementation(platform("org.apache.logging.log4j:log4j-bom:2.16.0"))
第三种:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.apache.logging.log4j') {
details.useVersion '2.16.0'
}
}
}
项目中应用Gradle进行的测试,采用官方第三种方式解决,并打包部署成功。
由于时间关系没有详细的整体格式和讲解,有问题请直接联系。