Spring-Boot项目 修复log4j的漏洞

文章讲述了在项目接入公网前,发现log4j日志版本过低存在安全风险。现状是使用了spring-boot-starter-log4j2组件且依赖了log4j的相关库。解决方案是排除log4j-core的依赖,只保留log4j-api到2.17.1版本,并使用log4j-slf4j-impl的最新版,以消除安全隐患。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修复log4j的漏洞

背景

由于项目要接入公网,故需要在接入公网前对引入log4j的项目进行安全漏洞测试。结果检测出log4
j日志版本太低。要求将logj的版本升级到2.17.1
在这里插入图片描述

现状

1.现在引入的是spring-boot-starter-log4j2,而这个组件是依赖
log4j-api,log4j-core,log4j-slf4j-impl这几个组件的,
在这里插入图片描述
2.使用的是日志注解是lombok包下面的@Slf4j注解,并没有版本号,因此找了半天没有发现使用log4j的日志,那么问题也就卡在这里,安全同事说我们不通过,但我也找不到问题所在
在这里插入图片描述
3.我们去掉spring-boot-starter-log4j2组件后,项目整个的日志都不打印了,因此又回退代码

解决方案

lombok下面的注解只是一个声明,具体的实现还是依赖的spring-boot-starter-log4j2这个组件,因此实际上我们使用的日志还是spring-boot-starter-log4j2组件下的log4
j,我直接把spring-boot-starter-log4j2日志的组件替换成以下日志的实现(实际上排掉org.apache.logging.log4j包这个即可)

从以下可以看出:只有 log4j-core JAR 文件受此漏洞影响。仅使用 log4j-api JAR 文件而不使用 log4j-core JAR 文件的应用程序不受此漏洞的影响。

从版本 2.17.1(以及 Java 7 和 Java 6 的 2.12.4 和 2.3.2)开始,JDBC Appender 将使用 JndiManager 并要求 log4j2.enableJndiJdbc 系统属性包含 true 值以启用 JNDI。

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
        <exclusions>
            <exclusion>
                <artifactId>log4j-api</artifactId>
                <groupId>org.apache.logging.log4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.17.1</version>
        <exclusions>
            <exclusion>
                <artifactId>log4j-api</artifactId>
                <groupId>org.apache.logging.log4j</groupId>
            </exclusion>
            <exclusion>
                <artifactId>log4j-core</artifactId>
                <groupId>org.apache.logging.log4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>
<think>嗯,用户想要了解Spring Boot中的spring-boot-starter-freemarker和spring-boot-starter-log4j2,并且需要推荐稳定的版本。首先,我需要确认这两个starter的作用以及它们在Spring Boot中的版本兼容性。 首先,spring-boot-starter-freemarker是用来集成Freemarker模板引擎的,方便在Spring Boot应用中渲染视图。而spring-boot-starter-log4j2则是用于集成Log4j2日志框架,替代默认的Logback。用户可能需要这些依赖来满足特定的模板渲染或日志需求。 接下来要考虑的是版本选择。Spring Boot的版本会直接关联到这些starter的版本,所以需要选择一个稳定的Spring Boot版本。目前最新的稳定版是3.2.x系列,比如3.2.5,但考虑到长期支持,可能2.7.x(官方维护到2025年)也是一个选项,特别是如果用户还在用Java 8或不想升级到Java 17的话。 然后,需要检查这两个starter在对应Spring Boot版本中的稳定性。对于Spring Boot 3.x,需要Java 17及以上,而2.7.x支持Java 8到19。如果用户的项目环境是Java 8,那么只能选2.7.x。另外,Log4j2的版本需要注意是否有安全漏洞,比如过去的CVE问题,应确保推荐的版本已经修复了这些漏洞。 Freemarker的版本兼容性也需要确认,Spring Boot的starter通常会管理好这些依赖的版本,所以只要选对Spring Boot版本即可。例如,Spring Boot 2.7.23会使用Freemarker的稳定版本,如2.3.32,而Log4j2的版本可能为2.20.0,这两个都是已知的稳定版本,没有已知的高危漏洞。 还要考虑用户是否需要长期支持版本,Spring Boot 2.7.x属于较旧的版本,但仍在维护期内,适合需要稳定且不急于升级的项目。而3.x系列则提供了更多新特性,但需要更高的Java版本支持。 总结下来,需要根据用户的Java版本和项目需求来推荐。如果用户使用Java 17或更高,推荐Spring Boot 3.2.5;如果还在用Java 8,则推荐2.7.23。同时,给出相应的依赖示例,并提醒检查安全公告,确保Log4j2的版本没有漏洞。</think>以下是关于这两个 Spring Boot Starter 的说明及版本推荐: ### 一、组件说明 1. **spring-boot-starter-freemarker** - 用途:集成 Freemarker 模板引擎(常用于 HTML 页面渲染) - 特点:自动配置模板路径、支持热加载、与 Spring MVC 无缝集成 - 文件扩展名:`.ftl` 2. **spring-boot-starter-log4j2** - 用途:集成 Log4j2 日志框架(替代默认的 Logback) - 特点:高性能异步日志、支持 YAML/JSON 配置、丰富的过滤策略 --- ### 二、版本推荐 #### 方案 1:Spring Boot 3.x 系列(最新稳定版) - **推荐版本**:`3.2.5` (2024年1月发布) - **适用场景**:需要长期维护的新项目,使用 Java 17+ - **依赖配置**: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>3.2.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>3.2.5</version> </dependency> ``` #### 方案 2:Spring Boot 2.7.x 系列(长期维护版) - **推荐版本**:`2.7.23` (官方维护至 2025年8月) - **适用场景**:需要 Java 8 兼容的存量项目 - **依赖配置**: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>2.7.23</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.7.23</version> </dependency> ``` --- ### 三、版本选择建议 1. **Java 版本**: - Spring Boot 3.x:要求 Java 17+ - Spring Boot 2.7.x:支持 Java 8-19 2. **安全考量**: - Log4j2 推荐使用 `2.20.0+` 以修复历史漏洞(CVE-2021-44228 等) - 以上推荐版本均已包含安全修复 3. **兼容性验证**: - 可通过 Spring Initializr 验证依赖组合: ``` https://start.spring.io ``` 建议优先选择 Spring Boot 3.2.5(如需新特性)或 2.7.23(需 Java 8 支持),这两个版本均经过大量生产环境验证。使用前请检查官方安全公告:[Spring Security Advisories](https://spring.io/security)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值