注:比较简陋,仅供参考。
编写PHP代码,实现反序列化的时候魔法函数自动调用计算器
PHP反序列化
创建类
class Stu{
public $name;
public $age;
public $sex;
public $score;
}
创建对象
$stu1 = new Stu();
$stu1->name = "zs";
$stu1->age = 22;
$stu1->sex = true;
var_dump($stu1);
echo "<br />";
echo serialize($stu1);
反序列化
O:object
反序列化
以 __ 开头的函数,是PHP 中的魔术方法。
类中的魔术方法,在特定情况下会自动调用。即使魔术方法在类中没有被定义,也是真实存在的。
__construct() 在创建对象时自动调用
__destruct() 在销毁对象时自动调用
__wakeup() unserialize()时会自动调用这个函数
__sleep() serialize()时会自动调用这个函数
PHP反序列化举例
当执行反序列化语句 $stu1 = unserialize($stu1); 时,系统会自动调用 stu() 类中的 __wakeup() 方法,__wakeup() 方法调用函数a(),函数 a() 调用函数 b(),函数 b() 接收传参,执行系统命令
<?php
// 定义函数 a()
function a(){
// 调用函数 b()
b();
}
// 定义函数 b()
function b(){
// 方法一:
// 如果参数 cmd 的值为 zs 则执行 system 打开计算器
// if(@$_GET['cmd']=='zs'){
// system("calc");
// }
// 方法二:可以执行其他系统命令
// 如果参数 cmd 的值为 calc 则打开计算器
$cmd=$_GET['cmd'];
@system($cmd);
}
// 创建 stu 类
class Stu{
// 定义属性
public $name;
public $age;
public $sex;
public $score;
// 定义方法,当执行 unserialize() 反序列化函数时自动调用 __wakeup() 方法
public function __wakeup(){
a();
}
}
// 创建对象
$stu1 = new Stu();
// 对象赋值
$stu1->name = "zs";
$stu1->age = 22;
$stu1->sex = true;
// var_dump($stu1);
// 序列化
$stu1 = serialize($stu1);
// var_dump($stu1);
// 反序列化
echo "<br />";
$stu1 = unserialize($stu1);
// var_dump($stu1);
?>
验证
原文地址:https://blog.csdn.net/2301_79118231/article/details/134558512
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_6829.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。