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 |
|
结果

