反序列化漏洞

序列化的目的

序列化的最终目的是为了对象可以跨平台存储和进行网络传输(也可以在分布式应用系统中传递数据)也可以是将对象以二进制字节序列的方式存储在硬盘上

序列化概述

序列化是将对象状态为可保持或可传输的格式的过程,也就是将变量数据转换为字符串。通俗的说就是若想将一个实体类的整个实例对象的数据进行传输或者保存,需要将其转换成io流才能传输或者保存,这就是序列化过程,这是又为了安全的反序列化恢复成实例对象,就需要将实体类实现序列化接口。值得注意的是,json字符串在传输过程中也是序列化了的,序列化将对象转化为二进制流,反序列化将流转换为对象,这两个过程结合起来,就可以轻松地存储和传输数据。

在序列化期间,对象将其当前状态写入到临时或者持久性存储区,以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

JSON编码其实也能实现数据跨平台的传输和存储,但是JSON不能完全替代序列化,因为JSON不能直接处理对象数据,而序列化特别适合对对象数据的处理。

总结:

序列化:将数据结构或对象转换成二进制格式的过程。

反序列化:将序列化后生成的二进制转换成数据结构或对象的过程。

序列化使得复杂的数据结构可以被存储在文件中,或者通过网络传输。这样,数据就可以在不同的环境或者不同的时间点被重新使用或者访问。

反序列化后的数据结构取决于类的结构

面向对象的魔术方法

__construct:类的构造方法,创建对象时会调用
__destruct:类的析构方法,销毁对象时会调用
__get:访问一个不存在的属性或者访问一个private、protected属性时会调用
__set:为一个不存在的属性或者访问一个private、protected属性时会调用
__toString:对对象进行字符串操作时会调用
__call:在对象中调用一个不能访问的方法时调用
__issert():对不可访问的属性使用issert或者empty函数时调用此方法
__unset():对不可访问的属性使用unset函数时调用此方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值