一、什么是序列化和反序列化
序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串转换为对象供程序使用。在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize()。
二、反序列化魔方的利用
__construct() :构造函数,当创建对象时自动调用。
__destruct():析构函数,在对象的所有引用都被删除时或者对象被显式销毁时调用,当对象被销毁时自动调用。
__wakeup():进行unserialize时会查看是否有该函数,有的话有限调用。会进行初始化对象。
__ toString():当一个类被当成字符串时会被调用。
__sleep():当一个对象被序列化时调用,可与设定序列化时保存的属性。
三、使用PHP代码调用计算机
<?php
class TestClass {
public function __wakeup() {
system($_GET["cmd"]);
}
}
//先序列化成字符串
$serializedData = serialize(new TestClass());
//反序列化(解析从序列化字符串中恢复对象的函数)
$object = unserialize($serializedData);
?>