解决maven工程中依赖漏洞问题

工程上不可避免的引入的依赖发生CVE漏洞的情况,像比较有名的log4j 1.x的远程执行漏洞,对于已知的漏洞可以使用dependency check来进行漏洞扫描,发现工程上的漏洞。本文旨在如何发现工程上的漏洞,如何解决依赖漏洞。

1、dependency check

官网 可以下载command line来执行扫描,第一次运行需要下载很多信息,时间较长(猜测是CVE相关的数据),查看帮助:

shell 复制代码
 bin/dependency-check.sh --help

扫描产出:

shell 复制代码
bin/dependency-check.sh -s /path/to/jar -o /output

2、maven依赖分析

两个命令:

查看maven工程的依赖树

shell 复制代码
mvn dependency:tree

查看具体某个依赖坐标的情况,比如查看groovy的依赖引入情况:

shell 复制代码
mvn dependency:tree -Dverbose -Dincludes=org.codehaus.groovy:groovy

这样我们能看到依赖是如何引入的,以及引入的scope,在修复完成后,也能通过这种方式来验证依赖全部修复完成。

3、处理漏洞

发现了漏洞就需要对依赖做升级或者剔除处理:

  • 升级 ,在maven中央仓库中寻找高版本,不含有CVE漏洞的,进行版本升级,版本升级有可能涉及到工程代码的变动,比如log4j1.x升级到log4j2.x配置文件会有变动,版本之间的兼容性问题需要考虑和解决。
  • 剔除,对于引入漏洞的jar包,我们可以进行定向剔除,追踪到引入漏洞的依赖,定点排除无用的jar,善用
xml 复制代码
<exclusions>
    <exclusion>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </exclusion>
</exclusions>
  • 剔除and升级 , 当依赖的jartransitive scopecompile来引入的,如果做简单的剔除,代码有问题,这时候可以做定向升级,做法是先进行定向排除,再单独引入高版本进行升级处理。比如:
xml 复制代码
<dependency>
    <groupId>xxxxx</groupId>
    <artifactId>xxxx</artifactId>
    <version>x.x.x</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro</artifactId>
        </exclusion>
   </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro</artifactId>
    <version>1.11.0</version>
</dependency>
相关推荐
Libby博仙5 分钟前
Spring Boot 条件化注解深度解析
java·spring boot·后端
源代码•宸23 分钟前
Golang原理剖析(Map 源码梳理)
经验分享·后端·算法·leetcode·golang·map
小周在成长26 分钟前
动态SQL与MyBatis动态SQL最佳实践
后端
瓦尔登湖懒羊羊35 分钟前
TCP的自我介绍
后端
小周在成长37 分钟前
MyBatis 动态SQL学习
后端
子非鱼92140 分钟前
SpringBoot快速上手
java·spring boot·后端
我爱娃哈哈1 小时前
SpringBoot + XXL-JOB + Quartz:任务调度双引擎选型与高可用调度平台搭建
java·spring boot·后端
JavaGuide1 小时前
Maven 4 终于快来了,新特性很香!
后端·maven
开心就好20251 小时前
全面解析iOS应用代码混淆和加密加固方法与实践注意事项
后端
Thomas游戏开发1 小时前
分享一个好玩的:一次提示词让AI同时开发双引擎框架
前端·javascript·后端