【发布时间】:2018-05-21 23:11:27
【问题描述】:
我正在努力确保以安全的方式使用 spring-boot 和 Jackson。 Jackson 的某些版本中存在反序列化错误(来源:https://github.com/FasterXML/jackson-databind/issues/1599)。
默认情况下,Spring Security 不使用 Jackson 执行反序列化,因此这是用户的明确选择(来源:https://pivotal.io/security/cve-2017-4995)。
如果 Jackson 用于执行反序列化,则版本 2.7、2.8、2.8.9 和 2.7.9.1 以及 2.9.0.pr3 已修补(来源:请参阅 cowtowncoder 于 4 月 13 日评论,https://github.com/FasterXML/jackson-databind/issues/1599)而不是容易受到该错误的影响。
那么使用作为 spring、spring-boot 或 Spring Security 一部分的 Jackson 版本执行反序列化是否安全?
【问题讨论】:
-
这取决于您使用的这些工具的版本。例如,Spring Boot 版本 1 可能使用 Jackson 版本 1,而 Spring Boot 版本 2 使用 Jackson 版本 2。不只有 1 个“Spring Boot”仅使用一组依赖项。一个真实的例子是 Spring Boot 1.5.2 使用 Jackson 2.8.7
-
我的意思是包含这些信息:Spring Boot 1.59 “当前”版本。
-
如果您查看父 pom 文件,您将看到正在使用的 jackson 版本。
-
如果你使用gradle,执行gradlew依赖,你就知道了。如果你使用 Maven,使用 mvn dependency:tree,你就会知道。您也可以只查看 pom:mvnrepository.com/artifact/org.springframework.boot/…(当然,您可能有另一个依赖项导致使用另一个版本)。
标签: spring spring-boot jackson deserialization