序列化与反序列化

@TOC

序列化与反序列化定义

一、序列化:指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。
简单来说就是将对象转化成字符串
二、目的:方便存储与网络运输
三、反序列化:与序列化相反

代码举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Student //定义一个类//
{
public $name = 'studentone';
function getName()
{
return "deelmind";
}
function__construct()
{
echo"__construct"//构造函数//
echo"</br>";
}
}
$s=new Student();
echo $s->getName()."</br>";
$s_serialize=serialize($s);
print_r($s_serialize);
echo"</br>";
?>

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class Student //定义一个类//
{
public $name = 'studentone';
function getName()
{
return "deelmind";
}
function__construct()
{
echo"__construct"//构造函数//
echo"</br>";
$Student = '0:7:"Student":1:{s:4:"name";s:10:"studentone";}';
$s_unserialize = unseralize($Student);
print_r($s_unseralize);
echo"</br>";
?>

在这里插入图片描述

反序列化漏洞原理

反序列化漏洞就是指黑客序列化一个包含恶意代码的实例对象(通常是Runtime.exec来执行后台命令),此时会得到对象的字节数据。然后字节数据通过接口发送到服务端(被攻击的服务器)。服务器在反序列化出对象的过程中(readObject方法里面)就会触发触发恶意代码执行,从而达到攻击的目的。