Java Jackson json 到对象反序列化。如何处理 OWASP 不安全的反序列化?

Posted

技术标签:

【中文标题】Java Jackson json 到对象反序列化。如何处理 OWASP 不安全的反序列化?【英文标题】:Java Jackson json to object deserilization. How to deal with OWASP insecure Deserialization? 【发布时间】:2020-11-23 00:06:23 【问题描述】:

OWASP insecure Deserialization 威胁是众所周知的。 我的问题是,当我们在 java 部分使用 Jackson 等解析器库时,如何减轻这种威胁?

使用 Hibernate 验证或 Java 验证的验证能否解决问题?或者是否存在任何特殊或更好的技术来缓解这个问题?

【问题讨论】:

看看Which version of jackson-databind does not have remote execution vulnerability? 【参考方案1】:

首先,整个反序列化是关于 Java 对象的反序列化。这与 XML 解组或读取 JSON 无关。还有其他漏洞类可以处理这些问题。

假设您的代码接受 Java 类作为输入(可以通过 REST 端点进行 Bas64 编码和提供)。为什么会有人这样做?好吧,如果您想远程存储状态,那么您可以序列化 Java 类,发送它并在需要时接收它。没有意义?好吧,Jenkins did it anyway a while ago。

真正的问题不是反序列化,而是反序列化过程中防止代码执行。如何防止readObject()被调用?它将被自动调用。防止发生在 Java 代码深处的事情是一件痛苦的事情。

您可以尝试使用notsoserial 或SerialKiller,但这不会使您的代码更简单、更易于阅读。真正有效的一件事是不在代码中的任何地方使用不可信对象的反序列化。

【讨论】:

以上是关于Java Jackson json 到对象反序列化。如何处理 OWASP 不安全的反序列化?的主要内容,如果未能解决你的问题,请参考以下文章

使用Jackson将JSON数组反序列化为单个Java对象

如何使用 Jackson 将原始 JSON 反序列化为 Java 对象

json之jackson序列化反序列化探究(二)

Java下用Jackson进行JSON序列化和反序列化(转)

jackson中objectMapper的使用

rest-assured的对象映射(序列化和反序列化)