PHP反序列化详解(一)——反序列化基础

今天继续给大家介绍渗透测试相关知识,本文主要内容是PHP反序列化详解(一)——反序列化基础。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、反序列化概念

在编程开发时,我们会经常使用一些字符串、数字、类等类型的变量或者结构,这些在编程中非常常见。但是如果我们要在多个设备之间传递这些变量,则显得比较麻烦。为了方便在不同设备之间这些数据的传输,我们经常会使用序列化和反序列化操作。
序列化是指将一个变量转化为一个字符串的过程,而反序列化则是序列化的逆过程,即将序列化后的字符串再转化为变量的过程。

二、PHP反序列化实现

在PHP中,序列化需要使用serialize()函数,而返序列化则需要使用unserialize()函数。下面,我们简单的用一个例子,来展示这两个函数的作用。PHP代码如下所示:

<?php
$param1="Hello World!";
class cl1{
	public $param1=1;
	public $param2="param2";
}
$a=new cl1();
$str1=serialize($param1);
$str2=serialize($a);
echo($str1);
echo('<br>');
echo($str2);
?>

上述代码执行结果如下所示:
在这里插入图片描述
从上例中可以看出,serialize()函数可以将一个变量转化为一个字符串,相应的,unserialize()函数则可以将一个序列化后的字符串再转化为变量。

三、PHP反序列化结果解析

下面,我们来解析以下PHP反序列化后的结果。以上例中输出的类序列化结果为例:

O:3:"cl1":2:{s:6:"param1";i:1;s:6:"param2";s:6:"param2";}

最开始的O,表示变量的类型是一个对象类型的变量,后面使用冒号分隔,之后的3表示该变量值的长度为3,再后面的"cl1"表示这个对象的值,再后面的2表示该对象里面有2个变量。大括号例的是对象中变量的信息。用分号分隔两个变量名称和变量值。s表示字符串,i表示整数类型,后面的数字大多都代表长度,再后面跟的是该变量名称或者是变量值。
其他类型PHP反序列化可以查阅下表:

类型结构
strings:size:value;
integeri:value;
boolenb:value;
nullN;
arraya:size:{【key定义(参考以上四种)】;【value定义(参考以上四种)】;……}
ObjectO:ObjectNameLength:ObjectName:ObjectParamSize:{【每个变量定义(参考以上四种)】……}

原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远是少年啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值