第一步了解一下什么是序列化、反序列化
1.序列化与反序列化概念
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
上面是专业的解释,现在来点通俗的解释。
在代码运行的时候,可以是一个,也可以是一类对象的集合,很多的对象数据,这些数据中,有些信息我们想让他持久的保存起来,那么这个序列化。
2.序列化的作用
官方解释:序列化不仅仅用于网络通信或数据存储。 它也用于进程间通信、远程过程调用、对象关系映射等。 任何需要将数据从一种表示转换为另一种表示的场景都可能涉及到序列化。 总之,序列化是一种将数据或对象的状态转换为通用格式的过程,以便于存储、传输或在不同的环境中使用。
简单通俗描述(并不是非常准确,简易理解):为了保证所书写的代码(数据)可以在互联网上完整性传输,尽可能避免丢包乱序等情况。
什么是反序列化漏洞
反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize ()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval ()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来执行敏感操作,这就是反序列化漏洞。
反序列化漏洞一般出现在链式调用当中,不经意间在函数多次调用后出现代码执行情况。