前几天项目收到阿里报警,说Jackson反序列话出现漏洞(高危),如下:

jsonCompareResultFan maven地址 maven jackson_jar包

呃呃,出现漏洞无非就是更新版本喽,想也没想,直接将pom.xml中对应的版本升级到最新,build,run,一切都没有问题,紧接着需要找到有哪些模块引用了该组件,全文搜索了一遍,并无位置引用,寻思着改了半天基本没用,就去掉pom文件中该组件中的依赖,更新maven依赖,重新启动,项目依然正常,正常逻辑,找到当时加此依赖的同事,确定加依赖的场景:布拉巴拉,删掉没问题;

 

以为问题完美解决,于是重新更新maven依赖,瞅了一眼External Libraries库,emmm,发现pom移除的对应的版本组件没有了,但是有其他两个版本的依赖,无非就是有其他组件引用到了jackson的版本;分析出哪些组件引用了jackson版本,打开多年未用的eclipse,分析:

   

jsonCompareResultFan maven地址 maven jackson_spring_02

 找到对应的组件,共有三个不同版本,2.8.4,2.7.9,以及2.9.5版本,其中最终使用的是2.9.5版本,在看springboot中使用的是2.8.10,本以为:由于项目中使用了不同组件A,B,C,其中A,B,C都依赖了不同版本的组件d,那么最终的springboot.jar是会有c不同版本的jar;最终解压出springboot.jar发现只有一个版本的jar文件:如下图       

jsonCompareResultFan maven地址 maven jackson_spring_03

 

  结论1:

                 

jsonCompareResultFan maven地址 maven jackson_spring_04

jsonCompareResultFan maven地址 maven jackson_jar_05

 

 所以springboot.jar中只有jackson-2.8.10的jar,这里引用的是2.8.10的jar,我们找到springboot的依赖库:点击 spring-boot-starter-parent,进入springboot的dependencies如下图

  

jsonCompareResultFan maven地址 maven jackson_spring_06

jsonCompareResultFan maven地址 maven jackson_jar包_07

 

   那么此处是否只要修改了springboot中的jackson的版本是否就可以,找到springboot中引用的是jackson-bom,去maven仓库找jackson-bom的版本:https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-bom 

  果然找到符合的版本,则在pom文件中配置对应的版本即可:如下图

  

jsonCompareResultFan maven地址 maven jackson_jar包_08

 

在run,找到对应的springboot.jar解压,扎到lib下的jar包,发现jackson-databind 已经是安全的版本2.9.9.3;

  

jsonCompareResultFan maven地址 maven jackson_jar_09

 总结:1.项目中jar包重复依赖问题

    2.重复依赖分析思路---找到每个依赖对应的依赖组件

    3.springboot中更新其中组件版本的方法

            4.通过最终打出来的jar包确定引用版本

我们曾如此渴望生命的波澜,到后来才发现,人生最曼妙的风景是内心的淡定与从容