Java序列化的状态( 二 )

什么是序列化?

自从1997年发布JDK 1.1以来 , 序列化已经存在于Java平台中 。

它用于在套接字之间共享对象表示 , 或者将对象及其状态保存起来以供将来使用(反序列化) 。

在JDK 10及更低版本中 , 序列化作为java.base包和java.io.Serializable方法的一部分存在于所有的系统中 。

GeeksForGeeks对 序列化的工作原理 进行了详细的描述 。

有关更多如何使用序列化的代码示例 , 可以参看Baeldung对Java序列化的介绍 。

序列化的挑战和局限

序列化的局限主要表现在以下两个方面:

出现了新的对象传输策略 , 例如JSON、XML、Apache Avro、Protocol Buffers等 。

1997年的序列化策略无法预见现代互联网服务的构建和攻击方式 。

进行序列化漏洞攻击的基本前提是找到对反序列化的数据执行特权操作的类 , 然后传给它们恶意的代码 。 为了理解完整的攻击过程 , 可以参看Matthias Kaiser在2015年发表的“Exploiting Deserialization Vulnerabilities in Java”一文 , 其中幻灯片第14页开始提供了相关示例 。

推荐阅读