当前位置: 首页 > java >正文

PHP反序列化漏洞

一、序列化和反序列化是什么

在这里插入图片描述

  • 序列化
    序列化是把内存中的数据结构(如对象、列表等)转化为可存储或可传输格式(如 JSON、XML、二进制数据)的过程,这样就能将数据保存到文件或通过网络发送出去。
  • 反序列化
    反序列化则是序列化的逆向操作,它把之前序列化得到的存储或传输格式的数据重新转换为内存中的数据结构,以便程序能继续对其进行处理和使用。

二、为什么需要序列化

  • 数据持久化:将内存中的对象转为文件可存格式,如 JSON、XML,便于存储到磁盘,后续可反序列化读取。
  • 网络传输:网络传输仅支持二进制数据,序列化后的数据能在不同计算机间交换,接收方再反序列化处理。

三、魔术方法

什么是魔术方法

魔术方法就是编程语言中的一些特殊方法,这些方法在某些特定的条件会自动执行

常见的魔术方法
  • __call:调用不可访问或者不存在的方法时被调用。
  • __callStatic:调用不可访问或者不存在的静态方法时被调用。
  • __clone:对对象进行clone时,被调用。
  • __constuct:创建对象时,被调用。
  • __debuginfor:当调用var_dump()打印对象时被调用
  • destruct:摧毁对象时,被调用。
  • __get:读取不可访问或不存在属性时被调用
  • __invoke:当以函数方式调用对象时被调用
  • __isset:对不可访问或不存在的属性调用isset0或empty0时被调用
  • __set:当给不可访问或不存在属性赋值时被调用
  • __set_state:当调用var_export0导出类时,此静态方法被调用。用 set state的返回值做为var_export的返回值
  • __sleep:当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用
  • __tosleep:当一个类被转换成字符串时被调用
  • __unset:对不可访问或不存在的属性进行unset时被调用
  • __wakeup:当使用unserialize时被调用,可用于做些对象的初始化操作
http://www.xdnf.cn/news/4788.html

相关文章:

  • CBO和HBO区别及介绍
  • 【包含例题P1955、P1892、P2024、P1196】并查集、扩展域并查集、带权并查集
  • arcmap栅格数据地理坐标转换,从WGS84坐标到2000
  • 深入理解Bitmap及Roaring Map:原理与应用详解
  • PPIO × GPT4All:构建本地知识库,让AI更懂你
  • 从单智到多智:深度拆解基于MetaGPT的智能体辩论
  • AI原生手机:三大技术阵营的终极对决与未来展望
  • 使用Maple Flow创建电路最坏情况分析WCCA工作表
  • 【前端】每日一道面试题2:解释CSS盒模型的box-sizing属性,以及它在响应式布局中的作用。
  • 字符串哈希(算法题)
  • VR 南锣鼓巷:古老街区的数字化绘卷与沉浸式遨游​
  • 高处安装、维护拆除作业考试重点知识
  • PlatformIO
  • 遗传算法求解异构车队VRPTW问题
  • 基于Credit的流量控制
  • SQL知识点总结
  • 【Yolo精读+实践+魔改系列】Yolov3论文超详细精讲(翻译+笔记)
  • 第一次被AI指点出文章的问题
  • 【AXI总线专题】-AXI-LITE总线解读
  • 307.重新格式化电话号码
  • MySQL中MVCC的实现原理
  • WarpDemuX
  • AI开发跃迁指南(第三章:第四维度1——Milvus、weaviate、redis等向量数据库介绍及对比选型)
  • docker镜像误删恢复
  • 网络字节序 - 大端
  • 三格电子—ProfiNet 转 CAN/CANopen 网关应用案例
  • pygame联网飞机大战游戏实现
  • Ubuntu18.04 设置开机服务自启
  • 蓝桥杯FPGA赛道积分赛
  • 【愚公系列】《Manus极简入门》026-市场分析专家:“市场洞察家”