在Spring启动器父版本2.7.3中升级到SnakeYaml 1.31

t5zmwmid  于 2022-12-18  发布在  Spring
关注(0)|答案(4)|浏览(1341)

有一个springboot项目,其中希望排除snakeyaml 1.30或将其升级到1.31,以避免强化问题报告
snakeyaml1.30版本存在安全漏洞

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
</parent>

下面是该项目的有效pom.xml

<dependency>
          <groupId>org.yaml</groupId>
          <artifactId>snakeyaml</artifactId>
          <version>1.30</version>
          <scope>compile</scope>
        </dependency>

有没有可能像补救措施所说的那样升级到snakeyaml 1. 31版本?
参考:https://security.snyk.io/vuln/SNYK-JAVA-ORGYAML-2806360

2nbm6dog

2nbm6dog1#

SnakeYAML是Sping Boot 中的managed dependency,因此您只需将以下内容添加到pom.xmlproperties部分,即可使Spring Boot 2.3.7使用SnakeYAML 1.31而不是1.30:

<snakeyaml.version>1.31</snakeyaml.version>
olhwl3o2

olhwl3o22#

您始终可以通过pom.xml中的<dependencyManagement>块更改版本号:

<dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.31</version>
      </dependency>

   </dependencies>
</dependencyManagement>

这将自动改变你的项目将使用的版本。你可以通过运行mvn dependency:tree测试。它应该只显示snakeyaml的1.31版本。

**重要说明:**请确保在集成下一版本的Sping Boot 后立即删除此块,因为它很可能包含升级版本。否则,在将来更新后,您可能会无意中降级版本。

另外请注意,某些lib版本和Sping Boot 之间可能存在不兼容性,因此并不总是能够以这种方式更新版本。

5f0d552i

5f0d552i3#

如果您使用的是gradle,下面的答案与您相关。您可以简单地覆盖spring Boot 使用的版本:
使用io.spring.dependency-management插件,它将自动从您正在使用的Sping Boot 版本导入spring-boot-dependencies物料清单。

plugins {
   id 'org.springframework.boot' version '2.7.3'
}

完成后,您可以通过设置相应的属性来自定义spring正在使用的版本:

ext {
   set('snakeyaml.version','1.32')
}

要查看要覆盖的依赖项版本及其属性的完整列表,请浏览此处:
https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#appendix.dependency-versions.properties
现在,当运行./gradlew dependecies时,您可以看到org.yaml.snakeyaml已升级到v1.32:

+--- org.springframework.boot:spring-boot-starter-actuator -> 2.7.3
|    +--- org.springframework.boot:spring-boot-starter:2.7.3
|    |    +--- org.springframework.boot:spring-boot:2.7.3
|    |    |    +--- org.springframework:spring-core:5.3.22
|    |    |    |    \--- org.springframework:spring-jcl:5.3.22
|    |    |    \--- org.springframework:spring-context:5.3.22
|    |    |         +--- org.springframework:spring-aop:5.3.22
|    |    |         |    +--- org.springframework:spring-beans:5.3.22
|    |    |         |    |    \--- org.springframework:spring-core:5.3.22 (*)
|    |    |         |    \--- org.springframework:spring-core:5.3.22 (*)
|    |    |         +--- org.springframework:spring-beans:5.3.22 (*)
|    |    |         +--- org.springframework:spring-core:5.3.22 (*)
|    |    |         \--- org.springframework:spring-expression:5.3.22
|    |    |              \--- org.springframework:spring-core:5.3.22 (*)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:2.7.3
|    |    |    \--- org.springframework.boot:spring-boot:2.7.3 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.7.3
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |    +--- org.springframework:spring-core:5.3.22 (*)
|    |    \--- org.yaml:snakeyaml:1.30 -> 1.32


此答案基于v2.7.3的spring文档,可在此处找到:https://docs.spring.io/spring-boot/docs/2.7.3/gradle-plugin/reference/htmlsingle/

yebdmbv4

yebdmbv44#

我从我的网络应用程序中排除了snakeyaml依赖项,它们工作得很好。当然我使用的是application.properties,而不是application.yml

相关问题