欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > php反序列化

php反序列化

2025/5/6 19:12:46 来源:https://blog.csdn.net/2402_83134109/article/details/145047779  浏览:    关键词:php反序列化
一、序列化和反序列化
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() 如果有,在反序列化之前调用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词