本篇内容介绍了“php反序列化是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
<强> 1,前言强>
最近也是在复习之前学过的内容,感觉对PHP反序列化的理解更加深了,所以在此总结一下
<强> 2,serialize()函数强>
,,,,“所有php里面的值都可以使用函数序列化()来返回一个包含字节流的字符串来表示。序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。”
一开始看这个概念可能有些懵,但之后也是慢慢理解了
在程序执行结束时,内存数据便会立即销毁,变量所储存的数据便是内存数据,而文件,数据库是“持久数据”,因此php序列化就是将内存的变量数据“保存”到文件中的持久数据的过程。
, s 美元;=,序列化($变量),,//该函数将变量数据进行序列化转换为字符串 写入的。/目标文本文件& # 39;,,$ s);,//将$ s保存到指定文件
下面通过一个具体的例子来了解一下序列化:
& lt; ? php class 用户 { public 才能;age 美元;=,0; public 才能;name 美元;=,& # 39;& # 39;; public 才能;function  PrintData () {才能 ,,,echo & # 39; User & # 39;。$ this→名称强生# 39;如果# 39;。$ this→年龄强生# 39;years 老只& lt; br /祝辞;& # 39;; ,,} }//创建一个对象 $ user =, new 用户();//,设置数据=$ user→age 20;=$ user→name & # 39;大业# 39;;//输出数据 $用户→PrintData ();//输出序列化之后的数据 echo 序列化($ user); ?在
这个是结果:
可以看到序列化一个对象后将会保存对象的所有变量,并且发现序列化后的结果都有一个字符,这些字符都是以下字母的缩写。
a 作用;array ,,,,,,,, b 作用;布尔 d 安康;double ,,,,,,,,小姐:安康;整数 o 安康;common object ,,,, r 作用;参考 s 安康;string ,,,,,,,, C 作用;custom 对象 O 安康;class ,,,,,,,, N 作用;null R 安康;pointer 参考文档,,U 作用;unicode 字符串
了解了缩写的类型字母,便可以得到PHP序列化格式
O: 4:“User": 2: {: 3:“age"我:20;s: 4:“name";销售:4:“daye";} 对象类型:长度:“类名”:类中变量的个数:{类型:长度:“值“;类型:长度:“值“;……}
通过以上例子,便可以理解了概念中的通过序列化()函数返回一个包含字节流的字符串这一段话。
<强> 3,unserialize()函数
强>
<代码> unserialize() 代码>对单一的已序列化的变量进行操作,将其转换回PHP的值。在解序列化一个对象前,这个对象的类必须在解序列化之前定义只
简单来理解起来就算将序列化过存储到文件中的数据,恢复到程序代码的变量表示形式的过程,恢复到变量序列化之前的结果。
, s 美元;=,file_get_contents(“。/目标文本文件& # 39;);,//取得文本文件的内容(之前序列化过的字符串) 美元,变量,=,unserialize ($ s);,//将该文本内容,反序列化到指定的变量中
通过一个例子来了解反序列化:
& lt; php ? class 用户 { public 才能;age 美元;=,0; public 才能;name 美元;=,& # 39;& # 39;; public 才能;function  PrintData () {才能 ,,,echo & # 39; User & # 39;。$ this→名称# 39;公司,is & # 39;。$ this→年龄# 39;公司,years 老只& lt; br /祝辞;& # 39;; ,,} }//重建对象 $ user =, unserialize (& # 39; O: 4:“User": 2: {: 3:“age"我:20;销售:4:“name";销售:4:“daye";} & # 39;); $用户→PrintData (); ?在
这个是结果:
<强>注意:在解序列化一个对象前,这个对象的类必须在解序列化之前定义。否则会报错强>
<强> 4,PHP反序列化漏洞强>
在学习漏洞前,先来了解一下PHP魔法函数,对接下来的学习会很有帮助