首页 > 编程语言 >php反序列化实例讲解

php反序列化实例讲解

时间:2022-09-03 21:35:44浏览次数:49  
标签:__ 触发 调用 对象 实例 序列化 php

0x00 为什么使用php序列化

序列化的原因:为了数据存取方便。

 

0x01 什么是php反序列化

什么是序列化,将值以字符串的形式存储:serialize($tom)

 

 

0x02 php反序列化基础语法

1、基础语法

O:6 : 参数类型为对象(object) "Person":2  :  参数名为 Person ,有两个值 s:4:"name" :   s数据类型为字符串,长度为4 ,值为"name" i:18 : i为数据类型为 int 值为18

 

 

2、反序列化:

 

3、注意点:

\x00 + 类名 + \x00 + 变量名 反序列化出来的是private变量 \x00 + * + \x00 + 变量名    反序列化出来的是protected变量

 

4、私有属性的反序列化:

 

 

5、魔术方法(写了才会调用,不写不会)

__wakeup() //使用unserialize时触发 
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发 __invoke() //当脚本尝试将对象调用为函数时触发

 

常用的几个:

__construct:构造函数,PHP5允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 
__toString: 打印一个对象时,如果定义了__toString()方法,就能在测试时,通过echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据。
__destruct: 析构函数,PHP5引入了析构函数的概念,这类似于其它面向对象的语言, 如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
__sleep magic方法,在一个对象被序列化的时候调用。
__wakeup magic方法,在一个对象被反序列化的时候调用。

 

存在echo,打印对象时,将调用__toString

 

 

不存在echo则不会调用类定义的toString方法

 

 

__wakeup,为magic方法,在一个对象被反序列化的时候调用:

 

 

绕过wakeup的方法(使该wakeup函数不执行的办法):属性超过原定义属性个数:

 

 

0x03 php反序列化例题讲解

php反序列化简单实例讲解:

首先序列化,再进行反序列化:

 

 

 

 

上面序列化的构造是可以在网上找平台直接传入方法就能构造成功的。

标签:__,触发,调用,对象,实例,序列化,php
From: https://www.cnblogs.com/cute-puli/p/16653701.html

相关文章

  • PHP中nl2br函数,那有没有它的反函数br2nl?
    文章来源:https://www.yerenwz.com/6565.html是的,感觉正常人的第一反应是既然有nl2br函数,那必然有反函数br2nl,然后实际上野人告诉你是没有的,哈哈哈。所以就得自己实现,实......
  • java 用反射获取自定义注解的信息实例
    最近看了些spring的源码,回来重新看一下反射和注解的一些文档,写了一个小例子,记录一下。packagecom.wbk.annotation;importjava.lang.annotation.*;importjava.lang.refle......
  • 搭建apache+php时php下面没有phpapache那个
    如果没有这个  你下载错了 ......
  • php安装
    apche下载 官网下载网址:ApacheHausDownloads解压到指定的文件夹下面安装命令官网上面有,要注意要用管理员权限打开cmd  官网下载解压后php.ini-development重......
  • PHP代码审计——文件操作漏洞
    梦想CMS(lmxcms)任意文件删除1.漏洞详情——CNVD-2020-59469 2.漏洞描述称后台Ba***.cl***.php文件存在任意文件删除,查看cms源码,只有BackdbAction.class.php和Basic......
  • 说一下 new 创建实例的时候都做了什么
    创建一个空对象让这个新对象的圆形_proto_指向构造函数的原型prototype让this指向新对象,然后执行构造函数的代码如果函数没有return,或者return基本数据类型,则最终返......
  • php的可变变量覆盖漏洞
    题目如下:<?phphighlight_file('source.txt');echo"<br><br>";$flag='xxxxxxxx';$giveme='cancanneedflag!';$getout='No!flag.Tryagain.Comeon!';......
  • 项目管理流程实例
    每个公司的项目管理流程都不尽相同,但是都值得参考,画出流程不意味就是条条框框了,而是让大家有章可循,流程不是限制效率而是促进整体效率,并且流程是需要持续迭代优化的。 ......
  • WordPress的网站链接,如何去掉index.php和category?
    使用WordPress搭建网站时,如果你是基于IIS服务器搭建的,肯定会遇到这个问题,就是固定链接设置好后,网址会出现烦人的index.php和category这两个关键字。  举个例子,博客的分......
  • 网络传输数据序列化工具Protostuff
    一直在物色比较好用的网络传输数据序列化工具,看了诸如marshalling,protobuff等,但是均有一个共同特点,使用起来异常繁杂,有没有比较好用同时性能又不会太差的组件呢?答案当......