首页 > 编程语言 >PHP反序列化漏洞笔记(一):初识序列化

PHP反序列化漏洞笔记(一):初识序列化

时间:2023-08-17 14:02:46浏览次数:42  
标签:__ PHP string 对象 初识 序列化 方法 属性

  1. PHP 类与对象类:一组共享相同结构和和行为的对象集合
    对象:类的实例 使用new的关键字

Php magic函数

在PHP中,魔术方法(Magic Methods)是一组特殊的函数,它们以双下划线(__)作为前缀来命名。这些函数在特定的情况下会自动调用,以执行一些特定的操作。以下是一些常用的魔术方法:

PHP反序列化漏洞笔记(一):初识序列化_网络安全


PHP反序列化漏洞笔记(一):初识序列化_网络安全_02


实践:

PHP反序列化漏洞笔记(一):初识序列化_网络安全_03

PHP反序列化漏洞笔记(一):初识序列化_网络安全_04


自动化的操作:魔术方法在特定的情况下会被自动调用,无需手动调用,从而减少冗余的代码。例如,__construct() 方法会在对象创建时自动调用,__destruct() 方法会在对象销毁时自动调用,这样可以方便地进行初始化和资源释放操作。

动态属性和方法控制:通过 __get()、__set()、__isset()、__unset() 方法,可以动态地获取、设置、判断和删除对象的属性。通过 __call() 和 __callStatic() 方法,可以动态地捕获和处理未定义的方法调用。这样可以实现属性和方法的动态控制,增加了代码的灵活性。

自定义对象输出:通过 __toString() 方法,可以自定义对象被转换为字符串时的输出格式。这样可以对对象的展示形式进行定制,便于调试和日志记录。

对象的克隆控制:通过 __clone() 方法,可以对对象的克隆行为进行控制

  1. PHP 的序列化和反序列化

Php 对象存活时是在内存里面,我们可以访问对象的属性和方法,一旦代码运行完毕,对象就消亡了,对象访问不到了,那我们能不能将对象以某种形式存储起来,之后继续使用或者远程传递到别的地方去使用这时,序列化就出现了。

序列化是将数据结构或对象转换为可存储(一般是字符串)或传输的形式,使其能够在不同的系统或平台上进行存储、传输和恢复的过程。

PHP反序列化漏洞笔记(一):初识序列化_PHP_05




序列化演示

我们定义一个class 有公有属性,私有属性还有方法:

PHP反序列化漏洞笔记(一):初识序列化_序列化_06



序列化的结果

PHP反序列化漏洞笔记(一):初识序列化_序列化_07



第1个 为int类型,所以标号为i, 值为32,序列化的结果为i:32;为5个字符,长度为string(5)


第2个 为string类型,所以标号为s, 字符长度为4 “wuya”,序列化的结果为s:4:”wuya”

;为11个字符,长度为string(11)


第3个 为布尔类型,所以标号为b, 值为1,序列化的结果为b:1;,为4个字符,长度为string(4)


第4个 为null类型,所以标号为N, 序列化的结果为N;为2个字符,长度为string(2)


第5个 为数组类型,所以标号为a, array里面有2个,所以值为a:2,两个值里面有键值,序列化为int与字符串类型,加起来总长度为34个字符,长度为string(34)


第6个 为对象类型,所以标号为object, 值为10(对象的名字),里面有两个属性data和pass

data 的值是字符串,他们序列化后都是string,但是pass是私有属性,序列化是会调用本身的class,所以序列化的是类的名字+私有属性的名字SerialTypepass,而不是pass单独的名字,他的值为true是第2个的布尔类型,所以序列化为b:1.





除了有php的序列化,还有其他序列化的格式

PHP反序列化漏洞笔记(一):初识序列化_网络安全_08



PHP反序列化漏洞笔记(一):初识序列化_网络安全_09


PHP反序列化漏洞笔记(一):初识序列化_序列化_10



PHP反序列化演示

PHP反序列化漏洞笔记(一):初识序列化_PHP_11




反序列化注意

PHP反序列化漏洞笔记(一):初识序列化_网络安全_12

PHP反序列化漏洞笔记(一):初识序列化_网络安全_13

PHP反序列化漏洞笔记(一):初识序列化_序列化_14







标签:__,PHP,string,对象,初识,序列化,方法,属性
From: https://blog.51cto.com/u_15854462/7121912

相关文章

  • php数组
    可以使用单个变量名存储多个不同类型的数据的特殊变量,这就是php数组。php数组就是一个特殊的变量,它允许存储多个任意类型的数据。php数组有两种类型,分为索引数组和关联数组。索引数组:变量的“编号”是数,整数不具备一定的语义。关联数组:变量的"编号”用字符中表示,可以具备一定的语义......
  • 基于PHP的花茶交流平台的设计与实现-计算机毕业设计源码+LW文档
    摘  要现在这种紧张压抑的生活状态,人们已经渐渐忘记了原本的样子,我们有时会想着去放下手中的工作,学会享受生活,品鉴人间趣味。在我国近五千年的历史长河中,茶文化对人们来说有着深厚含义。对于有着丰富生活阅历的人来说,品茶聊天就是最佳休闲方式。借此我产生了灵感设计了茶交流......
  • Python 与 PHP 项目对接
    在Web开发中,前后端分离已经成为一种趋势。前端使用JavaScript进行交互,后端则使用Python或PHP进行处理。当一个项目需要同时支持前端和后端时,就需要将两个部分进行对接。本文将介绍如何使用Python与PHP项目进行对接。HTTP协议首先,我们需要了解HTTP协议。HTTP(Hypertex......
  • 剑指 Offer 37. 序列化二叉树(困难)
    题目:classCodec{public:voidrserialize(TreeNode*root,string&str){//编码递归函数:将树按照前序遍历,放入str字符串中。每个节点元素用','分隔if(root==nullptr){//如果遇到空节点,写入"none"。str+="none,";}el......
  • 使用docker安装php服务
    1、查找php镜像dockersearchphp 2、拉取php官方版本镜像文件到本地,此处使用7.3版本dockerpullphp:7.3 3、查看本地镜像文件dockerimagesphp 4、运行php服务,指定参数,配置文件等dockerrun-it\-d\-p9000:9000\-v/data/docker_www:/w......
  • 初识Hadoop
    Hadoop生态系统 资源调试系统YARNHDFS写入数据流程图 HDFS原理漫画    结语学习没有捷径,一步一个脚印! ......
  • php 字符串进行加*处理
    /$string是字符串$start从第几个开始加*$end从结尾第几个开始*publicfunctionstrReplace($string,$start,$end){$strlen=mb_strlen($string,'UTF-8');//获取字符串长度$firstStr=mb_substr($string,0,$start,'UTF-8');//获取第一位$l......
  • 初识C语言1
    #什么是C语言?#c语言是一门机器语言,高级语言,面向过程的语言。#C语言的数据类型#char字符型1byteshort短整型2byteint整型4bytelong长整型4/8bytelonglong长整型8bytefloat浮点型......
  • PHP在线客服系统推荐
    在当今数字化时代,企业客户服务的重要性不容忽视。为了提供卓越的客户体验,许多企业正在寻找PHP在线客服系统。这种系统不仅可以满足客户的需求,还能提升企业的形象。本文将深入探讨PHP在线客服系统的一些有趣话题。理解PHP在线客服系统PHP在线客服系统是基于PHP语言开发的一种客户......
  • Java中对象的序列化和反序列化方法
     Java中要序列化一个对象,必须与一定的对象I/O流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。 java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。在ObjectInputStream中用readObject()方法可以直接读取一......