log4j2漏洞风靡全球
影响的版本范围:Apache Log4j 2.x <= 2.14.1
根据官方的解释需要将log4j2包的版本:升级到2.15.0。
测试使用 Springboot 2.1.5 + Gradle 6.3版本进行测试。
当时以为Springboot已经天下无敌了,完全不需要考虑,结果现实比较打脸,根据gradle的包依赖,直接中q,版本在漏洞范围。
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方式:
//第一种//第二种 2.16.0 ... other dependencies including spring-boot-dependencies org.apache.logging.log4j log4j-bom2.16.0 import pom
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进行的测试,采用官方第三种方式解决,并打包部署成功。
由于时间关系没有详细的整体格式和讲解,有问题请直接联系。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)