PHP代码审计-序列化与反序列化
简介
在 PHP 中将对象、数组、变量等转化为字符串,这样便于将数据保存到数据库或者文件中,这个过程称之为序列化。当需要使用这些数据时,就需要用反序列化就是将字符串还原回原来的样子,也就是序列化的逆过程。
在 PHP 中序列化与反序列化会用到两个函数
- serialize 函数 – 序列化函数
- unserialize 函数 – 反序列化函数
案例
1 |
|
输出结果 :
1 | O:4:"test":4:{s:4:"name";s:7:"Lixiney";s:3:"age";i:18;s:5:"hobby";a:3:{i:0;s:5:"sleep";i:1;s:4:"code";i:2;s:4:"girl";}s:3:"sex";s:4:"male";} |
O 表示 对象类型 Object
s 表示字符串 string
i 表示整形 int
a 表示数组类型 array
反序列化
使用在线工具
序列化后的内容只有成员变量,没有成员函数
序列化后,如果成员变量的类型是 protected 受保护的类型 ,会在变量名前加上 \x00*\x00
常见的魔术方法
魔术方法 | 功能 |
---|---|
__construct() | 构造函数 |
__destruct() | 析构函数,对象销毁时触发 |
__call() | 在对象上下文中调用不可访问的方法时触发 |
__wakeup() | 当对象被执行反序列化时,会先调用这个方法 |
__sleep() | 当对象被执行序列化操作时,会先调用这个方法 |
__toString() | 对象被当成字符串时的回应方法 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.