Java 反序列化基础

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

序列化是将内存对象转换为字节流,反序列化则是将字节流转换为对象,广泛应用于文件存储和网络传输。常见的序列化协议有XML、JSON和Protobuf。在Java中,序列化需要实现Serializable接口,并使用ObjectOutputStream和ObjectInputStream进行操作。反序列化存在安全风险,攻击者可能利用可控类执行恶意代码。

🎯

关键要点

  • 序列化是将内存中的对象压缩成字节流,反序列化是将字节流转化成内存中的对象。
  • 序列化与反序列化的设计用于数据传输,常见应用场景包括文件存储、网络传输和RMI。
  • 常见的序列化协议有XML、JSON和Protobuf。
  • Java中序列化需要实现Serializable接口,并使用ObjectOutputStream和ObjectInputStream进行操作。
  • Java的序列化有两种写法,分别使用传统的FileOutputStream和现代的NIO库。
  • 反序列化存在安全风险,攻击者可能利用可控类执行恶意代码。
  • 反序列化时,JVM会调用自定义的readObject方法,可能导致执行恶意命令。
  • HashMap的序列化和反序列化实现可能导致安全漏洞,特别是当参数中包含可控类时。
  • Java反射机制允许在运行时探查类的信息,并动态调用方法。
  • 反射的使用包括获取类的方法、实例化类对象和执行函数等。
  • 文章提供的技术信息仅供参考,读者应根据自身情况谨慎使用。
➡️

继续阅读