首页 > 编程语言 >php反序列化

php反序列化

时间:2025-01-10 10:29:04浏览次数:3  
标签:__ php 函数 对象 PHP wakeup 序列化

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

序列化(Serialization):把对象转换为字符串进行存储的过程

反序列化(DeSerialization):把存储的字符串恢复为对象的过程

2.应用场景:

当对象需要被网络传输时

当对象状态需要被持久化时

3.序列化函数和反序列化函数:

①序列化:serialize() 

O:1:"s":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

序列化时PHP 对不同类型的数据用不同的字母进行标示

a - array、b - boolean、d - double、i - integer、o - common object、r - reference、s - string、

C - custom object、O - class、N - null、R - pointer reference、U - unicode string

②反序列化:unserialize()  

如果传递的字符串不可以序列化,则返回false.

如果对象没有预定义,反序列化得到的对象时_PHP_Incomplete_Class

反序列化与Maigc函数

_wakeup

_unserialize(7.4.0)

如果类中同时定义了_unserialize()和_wakeup()两个魔法函数,则只有_unseialize()方法会生效,_wakeup()方法会被忽略。

4.序列化和反序列化的作用

  传输对象

  用作缓存(cookie、session)

二、漏洞原理:

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题.如果一个PHP代码中使用了unserialize函数去调用某一个类,该类会自动执行一些自定义的魔法函数,如:_wakeup函数,如果该函数中执行的操作是我们可以注入数据的,那么很可能造成注入攻击。

一般的黑盒或者扫描很难发现反序列化漏洞,需要使用代码审计的方法,来发现。

PHP将所有以__(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以__为前缀。 

1.什么是魔术方法?

系统在特定的时机自动调用的方法

2.常见的反序列化漏洞中出现的魔术方法及其触发条件:

__construct()当一个对象创建时被调用

__destruct()当一个对象销毁时被调用

__toString()当一个对象被当作一个字符串时使用

__sleep() 在对象在被序列化之前运行

__wakeup() 如果有,在反序列化之前调用

标签:__,php,函数,对象,PHP,wakeup,序列化
From: https://blog.csdn.net/2402_83134109/article/details/145047779

相关文章

  • 如何修改PHP最大文件上传大小限制
    默认情况下,PHP上传文件大小限制是2M,超过2M上传将会报错。如果我们上传的图片或压缩包超过2M,需要修改PHP的配置文件最大上传限制。找到PHP组件目录下的php.ini文件,使用记事本打开,查找post_max_size(允许POST数据大小)值修改成10M或更大,查找upload_max_filesize(允许上传文件大小)值,可......
  • 如何在服务器上查看当前运行的PHP版本?
    要查看主机当前运行的PHP版本,您可以按照以下步骤操作。这种方法简单且适用于大多数Web服务器环境。步骤描述1创建一个新的PHP文件,例如info.php。2在文件中添加以下代码: php<br>phpinfo();<br>3将该文件上传到您的Web服务器的根目录。4在浏览器中访问h......
  • json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
    在使用Python的json模块进行序列化时,默认情况下会将中文转换为Unicode编码。如果你希望在序列化时保留中文,可以通过设置ensure_ascii=False来实现。以下是示例代码:importjsondata={"name":"李浩瑞","age":30}#默认行为(中文会被转换成Unicode)json_def......
  • 小九源码-php001-基于PHP的高校毕业生就业服务平台
    ......
  • php8.1新特性
        php8.0到php8.1增加了不少新特性,大部分只是做了小的一些调整,接下来我们将会学习在项目中经常用到或者说比较具有意义的新特性。 一、枚举      枚举可以算得上是“千呼万唤始出来”,在这之前我们可以看到很多php程序员在社区、论坛这些地方表达了对枚......
  • 提升 PHP 编码效率的 10 个实用函数
    PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。以下列出了10个可以显著加快您的编码过程的PHP函数:1、array_map()array_map() 当需要对数组每个元素执行相同......
  • Spark 源码分析(一) SparkRpc中序列化与反序列化Serializer的抽象类解读 (java序列化部
    目录(3)JavaSerializerInstance定义了一个Java序列化实例(1)构造方法参数(2)方法1:serializeStream(3)方法2:deserializeStreamdefaultClassLoader(4)方法3:deserializeStreamloader(5)方法4:serialize(6)方法5:deserializeloader(7)方法6:deserializedefaul......
  • windows下php安装依赖版本工具composer
    1.先把php加入到环境变量 2.直接下载composer.phar,地址:https://dl.laravel-china.org/composer.phar把下载的composer.phar放到PHP安装目录  命令下载: php-r"copy('https://getcomposer.org/installer','composer-setup.php');"phpcomposer-setup.phpphp......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的中医病案管理系统,会使;中医病案管理系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本系统是针对目前中医病案管理系统的实际需求,从实际工作出发,对过......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,志愿服务管理小程序被用户普遍使用,方便用户能够可以随时进行在线查看志愿服务管理的数据信息管理,特开发了志愿服务管理......