首页 > 编程语言 >学习笔记-PHP的反序列化

学习笔记-PHP的反序列化

时间:2022-11-08 10:35:18浏览次数:71  
标签:__ PHP 笔记 访问 调用 file 序列化 属性

魔术方法

方法名 调用条件
__call 调用不可访问或不存在的方法时被调用
__callStatic 调用不可访问或不存在的静态方法时被调用
__clone 进行对象clone时被调用,用来调整对象的克隆行为
__constuct 构建对象的时被调用;
__debuginfo 当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本
__destruct 明确销毁对象或脚本结束时被调用;
__get 读取不可访问或不存在属性时被调用
__invoke 当以函数方式调用对象时被调用
__isset 对不可访问或不存在的属性调用isset()或empty()时被调用
__set 当给不可访问或不存在属性赋值时被调用
__set_state 当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。
__sleep 当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用
__toString 当一个类被转换成字符串时被调用
__unset 对不可访问或不存在的属性进行unset时被调用
__wakeup 当使用unserialize时被调用,可用于做些对象的初始化操作

反序列化的常见起点

方法名 调用条件
__wakeup 一定会调用
__destruct 一定会调用
__toString 当一个对象被反序列化后又被当做字符串使用

反序列化常见跳板

方法名 调用条件
__toString 当一个对象被当做字符串使用
__get 读取不可访问或不存在属性时被调用
__set 当给不可访问或不存在属性赋值时被调用
__isset 对不可访问或不存在的属性调用isset()或empty()时被调用

反序列化常见终点

方法名 调用条件
__call 调用不可访问或不存在的方法时被调用
call_user_func 一般php代码执行都会选择这里
call_user_func_array 一般php代码执行都会选择这里

Phar反序列化原理以及特征

phar://伪协议会在多个函数中反序列化其metadata部分
受影响的函数包括不限于如下:

copy,file_exists,file_get_contents,file_put_contents,file,fileatime,filectime,filegroup,
fileinode,filemtime,fileowner,fileperms,
fopen,is_dir,is_executable,is_file,is_link,is_readable,is_writable,
is_writeable,parse_ini_file,readfile,stat,unlink,exif_thumbnailexif_imagetype,
imageloadfontimagecreatefrom,hash_hmac_filehash_filehash_update_filemd5_filesha1_file,
get_meta_tagsget_headers,getimagesizegetimagesizefromstring,extractTo

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

标签:__,PHP,笔记,访问,调用,file,序列化,属性
From: https://www.cnblogs.com/haidragon/p/16868787.html

相关文章

  • Transfer-Meta Framework for Cross-domain Recommendation to Cold-Start Users阅读
    动机本文是2021年SIGIR上的一篇论文。本文主要针对的是冷启动问题中的跨域推荐问题,目前常用的方法是EMCDR,但是这个方法很大局限性,它仅在重叠的用户上学习,这样学到的模型会......
  • 学习笔记-php代理审计_可能被利用的函数
    in_array()功能:检查数组中是否存在某个值。定义:in_array(mixed$needle,array$haystack,bool$strict=false):bool解释:大海捞针,在大海(ha......
  • 序列化工具
     .NET性能优化-是时候换个序列化协议了-InCerry-博客园(cnblogs.com) ......
  • JAVA笔记
    inti=10;i++;//单独使用System.out.println("i:"+i);//i:11intj=10;++j;//单独使用System.out.println("j:"+j);//j:11intx=10;inty=x++;//赋......
  • JVM学习笔记——内存模型篇
    JVM学习笔记——内存模型篇在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存模型部分我们会分为以下几部分进行介绍:内存模型乐观锁与悲观锁synchron......
  • Long数据类型序列化Json后传递给前端,产生的精度丢失的问题解决
    问题产生的原因Long类型的数据,如果我们在后端将结果序列化为json,直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。java中的long能表示的范围比js中number大,......
  • 浅谈PHP设计模式的注册树模式
    简介:注册树模式,属于结构型的设计模式。一种很简单的设计模式适用场景:类似IOC。写一个庞大的类库的时候,为了方便各种资源的归纳,可以统一放到一棵树上。优点:把一个个游......
  • Head First Java 读书笔记
    第9章:构造器与垃圾收集器什么是栈与堆? 堆(heap)、栈(stack)当Java虚拟机启动时,它会从底层操作系统中取得一块内存,以此区段来执行Java程序。实例变量保存在所属的对象中,位于......
  • sublime配置php
    sublime下载直接从sublime的官网下载安装文件:https://www.sublimetext.com/万物的起始:安装插件管理工具packagecontrol使用Ctrl+、(数字1左边那个)快捷键或者通过View......
  • 《代码大全》笔记第七篇
    第七部分:软件工艺这一部分主要分为五部分:布局与风格、自说明代码、个人性格、软件工艺的话题、何处有更多信息。主要是关于影响代码质量的其他方......