1.序列化漏洞之什么是序列化和反序列化
什么是序列化
序列化用到的函数serialize()
序列化就是将一个数组和对象变成一个字符,可以方便传递和存储,他的结构不会改变
数组序列化
咧:
1 |
|
结果
输出的内容介绍
1 | a:3:{i:0;s:3:"One";i:1;s:3:"two";i:2;s:5:"three";} |
a:
类型数组|
类型有a代表数组,s代表字符,i代表数字,o代表对象,N代表空的,b代表布尔,等等我会把他放到最下面
3:
数组长度|i:0;
i是int型的,0
是第一个数组|s:
是一个字符串|3:"two";
有三个字符是"two"
|i:1;
i是int型的,1
第二个数组|s:
是一个字符串|3:"two";
有三个字符是"two"
|i:
i是int型的,2
第三个数组|s:
是一个字符串|5:"three";
有五个字符是"three"
|
数组反序列化
反序列化会用到unserialize()
函数进行反序列化
我们将序列化出来的字符保存到文件里面然后在给反向序列化出来
将序列化的字符串保存到文件里面
咧:
下面会用到file_put_contents()
函数file_put_contents()
函数使用https://www.runoob.com/php/func-filesystem-file-put-contents.html
1 |
|
结果
已经保存到了a.txt文件里面了
读取文件的被序列化的字符串给反向序列化出来
反向序列化会把被序列化的数组给变回来
咧:fread()
函数打开文件fgets()
函数用于从文件读取单行fclose()
函数用于关闭打开的文件
1 |
|
对象序列化
对象序列化方法和数组一样
咧:
1 |
|
结果
1 | O:4:"Site":2:{s:3:"url";s:3:"aaa";s:6:"twourl";s:3:"bbb";} |
o:
类型是对象|
类型有o代表对象s代表字符,i代表数字,a代表数组,,N代表空的,b代表布尔,等等我会把他放到最下面
4:
代表对象名字站几个字符|"Site":
代表对象名字|2:
代表里面有变量|s:
代表是一个字符串类型的|3:
代表内容有三个字符|"url";
代表变量名是"url"
|s:
代表是一个字符串类型的|3:
代表内容有三个字符|"aaa"
代表"url"
内容是"aaa"
|s:
代表是一个字符串类型的|6:
代表内容有六个字符|"twourl";
代表变量名是"twourl"
|s:
代表是一个字符串类型的|3:
代表内容有三个字符|"bbb"
代表"twourl"
内容是"bbb"
|
对象反序列化
对象和数组反序列化也是一样的
反序列化会用到unserialize()
函数进行反序列化
我们将序列化出来的字符保存到文件里面然后在给反向序列化出来
将序列化的字符串保存到文件里面
咧:
下面会用到file_put_contents()
函数file_put_contents()
函数使用https://www.runoob.com/php/func-filesystem-file-put-contents.html
1 |
|
结果
读取文件的被序列化的字符串给反向序列化出来
反向序列化会把被序列化的数组给变回来
咧:fread()
函数打开文件fgets()
函数用于从文件读取单行fclose()
函数用于关闭打开的文件
1 |
|
结果