什么是序列化
序列化 (Serialization)是指将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
简而言之
序列化
将数据结构或对象转换成二进制串的过程
反序列化
将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
具体例子
public static void main(String args[]) throws Exception {
String obj = “hello world!”;
// 将序列化对象写入文件object.txt中
FileOutputStream fos = new FileOutputStream(“object.txt”);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(obj);
os.close();
// 从文件object.txt中读取数据
FileInputStream fis = new FileInputStream(“object.txt”);
ObjectInputStream ois = new ObjectInputStream(fis);
// 通过反序列化恢复对象obj
String obj2 = (String)ois.readObject();
ois.close();
}
反序列化漏洞原理
反序列化漏洞的本质就是反序列化机制打破了数据和对象的边界,导致攻击者注入的恶意序列化数据在反序列化过程中被还原成对象,控制了对象就可能在目标系统上面执行攻击代码。Java序列化应用于RMI JMX JMS 技术中。
以上转载