test
发布于 2026-05-08 / 3 阅读
0
0

反序列化

php反序列化

php定义属性类型

修饰符

序列化结果

当前类内部

子类内部

外部对象(实例化调用)

权限等级

private

纯属性名

最小(私有)

protected

\0*\0属性名

中等(受保护)

public

\0类名\0属性名

最大(公共)

php反序列化函数

unserialize   #反序列化
serialize     #序列化
#构造反序列化时使用url编码(不可见字符 '\0' '*')
#php7.1+版本,反序列化对属性类型不敏感;
#反序列化赋值三种方法(绕过'\0'字符过滤):  外部赋值  构造方法赋值  直接赋值

魔术方法

触发条件

__construct()

对象创建(new)时会自动调用

__wakeup()

使用 unserialize() 时触发

__sleep()

使用 serialize() 时触发

__destruct()

对象被销毁时触发

__call()

在对象上下文中调用不可访问的方法时触发

__callStatic()

在静态上下文中调用不可访问的方法时触发

__get()

用于从不可访问的属性读取数据

__set()

用于将数据写入不可访问的属性

__isset()

在不可访问的属性上调用 isset()empty() 时触发

__unset()

在不可访问的属性上使用 unset() 时触发

__toString()

把类当作字符串使用时触发

__invoke()

当脚本尝试将对象调用为函数时触发

__autoload()

在代码中调用不存在的类时会自动调用该方法

session.serialize_handler处理器

处理器

对应储存格式

php

键名 + 竖线 + 经过 serialize() 函数反序列处理的值

php_binary

键名的长度对应的 ASCII 字符 + 键名 + 经过 serialize() 函数反序列处理的值

php_serialize (php>=5.5.4)

经过 serialize() 函数反序列处理的数组

数组的特性

当一个数组被挡函数触发时,数组第一个元素是对象,第二个元素是方法的名字时,对调用对象的方法。


评论