PHP反序列化详解(一)——反序列化基础
2023-09-14 09:01:43 时间
今天继续给大家介绍渗透测试相关知识,本文主要内容是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反序列化可以查阅下表:
类型 | 结构 |
---|---|
string | s:size:value; |
integer | i:value; |
boolen | b:value; |
null | N; |
array | a:size:{【key定义(参考以上四种)】;【value定义(参考以上四种)】;……} |
Object | O:ObjectNameLength:ObjectName:ObjectParamSize:{【每个变量定义(参考以上四种)】……} |
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
相关文章
- php window系统 xdebug+phpstorm 本地断点调试使用教程
- php+redis,延迟任务 实现自动取消订单,自动完成订单
- php 使用fileupload上传多张图片,压缩包
- php之内存管理基础
- 移动端与PHP服务端接口通信流程设计(基础版)
- 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件
- PHP 语法字符串函数 strcmp、strlen 使用及实现
- 2020 PHP 初级 / 基础面试题,祝你金三银四跳槽加薪 (适合基础不牢固的 PHPer)
- 程序员找工作必备 PHP 基础面试题(二)
- 程序员找工作必备 PHP 基础面试题
- PHP 开发工程师基础篇 - PHP 数组
- php分享十八七:mysql基础
- php+mysql模糊查询功能
- PHP中的符号 ->、=> 和 :: 分别表示什么意思?
- [namespace] PHP命名空间的使用基础
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- PHP 零基础入门笔记(4):PHP数据类型
- PHP 零基础入门笔记(13):数组相关函数
- PHP 零基础入门笔记(1):PHP 基础
- PHP 零基础入门笔记(15):算法 algorithm
- php基础语法-函数等
- fedora23安装php,mysql