序列化与反序列化介绍

文章目录

  • 一、序列化与反序列化
  • 二、PHP反序列化漏洞成因
  • 三、JAVA反序列化


一、序列化与反序列化

在PHP语言开发层面上基本都是围绕着serialize(),unserialize()这两个函数。serialize()函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变。

语法string serialize(mixed $value)

实例:可通过链接进行测试 -> 点击进入

<?php
$a = array('a' => 'admin' ,'b' => 'boss' , 'c' =>'cookie');  	//序列化数组
$s = serialize($a);
echo $s;
?>

在这里插入图片描述
unserialize()函数用于将通过serialize()函数序列化后的对象或数组进行反序列化,并返回原始的对象结构。

语法mixed unserialize(string $str)

实例:可通过链接进行测试 -> 点击进入

<?php
$str = 'a:3:{s:1:"a";s:5:"admin";s:1:"b";s:4:"boss";s:1:"c";s:6:"cookie";}';
$unserialized_data = unserialize($str);
print_r($unserialized_data);
?>

在这里插入图片描述
php允许保存一个对象方便以后重用,这个过程被称为序列化。在传递变量的过程中,有可能遇到变量值要跨脚本文件传递的过程。试想,如果在一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有的变量和内容释放掉了,我们要如何操作呢?难道要前一个脚本不断的循环,等待后面脚本调用?这肯定是不现实的。serialize和unserialize就是用来解决这一问题的。serialize可以将变量转换为字符串并且在转换中可以保存当前变量的值;unserialize则可以将serialize生成的字符串变换回变量。

二、PHP反序列化漏洞成因

PHP类中有一种特殊函数体的存在叫魔法函数,magic函数命名是以符号开头的,比如constructdestructtoStringsleepwakeup等等。这些函数在某些情况下会自动调用。而在反序列化时,如果反序列化对象中存在魔法函数,使用unserialize()函数同时也会触发。这样,一旦我们能够控制unserialize()入口,那么就可能引发对象注入漏洞。

construct():当一个类被创建时自动调用
destruct():当一个类被销毁时自动调用
invoke():当把一个类当作函数使用时自动调用
tostring():当把一个类当作字符串使用时自动调用
wakeup():当调用unserialize()函数时自动调用
sleep():当调用serialize()函数时自动调用
__call():当要调用的方法不存在或权限不足时自动调用

三、JAVA反序列化

序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。Java序列化是指把Java对象转换为字节序列的过程便于保存在内存文件数据库中,ObjectOutputStream类的writeObject()方法可以实现序列化。反序列化是指把字节序列恢复为Java对象的过程,ObjectInputStream类的readObject()方法用于反序列化。漏洞成因序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

待补充…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 设计模式 深入理解

在学习设计模式的时候&#xff0c;以前学习了下总以为理解了&#xff0c;但是在实际工作中基本上用不起来。在学习拆书后&#xff0c;想到用讲的方式去学习和思考的时候&#xff0c;要想讲清楚&#xff0c;就要深入理解其中的原理。在重新整理和写下来的过程中&#xff0c;感觉…

蓝桥杯刷题--python-28-并查集

528. 奶酪 - AcWing题库 T=int(input()) def union(p,i,j): p1=parent(p,i) p2=parent(p,j) p[p1]=p2 def parent(p,i): root=i while p[root]!=root: root=p[root] while p[i]!=i: x=i;i=p[i];p[x]=root return root class Node:…

存储器的层次结构和局部性原理

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第19篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲存储器的一部分内容。 存储器的层次结构 SRAM 静态随机存取存储器的芯片&#xff0c;SRAM 之所以被称为“静态”存储器&#xff0c;是因为只要处…

设计模式 之 策略模式

策略模式是一种定义一系列算法的方法&#xff0c;以相同的方式调用不同的算法&#xff0c;减少了各种算法类与使用算法类之间的耦合。 它的重心不是如何实现算法&#xff0c;而是如何组织&#xff0c;调用这些算法。从而让程序结构更灵活&#xff0c;具有更好的维护性和扩展性…

用Springboot(java程序)访问Salesforce RestAPI

本文讲一下&#xff0c;如何从0构建一个Springboot的应用程序&#xff0c;并且和Salesforce系统集成&#xff0c;取得Salesforce里面的数据。 一、先在Salesforce上构建一个ConnectApp。 有了这个&#xff0c;SF才允许你和它集成。手顺如下&#xff1a; 保存后&#xff0c;…

云计算系统管理(ADMIN)

01. 公司需要将/opt/bjcat3目录下的所有文档打包备份&#xff0c;如何实现&#xff1f; 答案&#xff1a; # tar -czf /tmp/bjcat3.tar.gz /opt/bjcat302. 简述创建crontab计划任务的流程 答案&#xff1a; 利用crontab –e -u 用户名 进入计划任务编辑模式 分 时 日 月 周 …

揭秘.dataru勒索病毒,远离数据被锁的威胁

导言&#xff1a; 在网络安全领域&#xff0c;勒索病毒已成为一个日益严重的威胁。其中&#xff0c;.dataru勒索病毒以其独特的加密技术和狡猾的传播方式&#xff0c;让许多企业和个人遭受了巨大的损失。本文将深入剖析.dataru勒索病毒的特点、传播方式&#xff0c;并提出有效…

Android kotlin全局悬浮窗全屏功能和锁屏页面全屏悬浮窗功能二

1.前言 在进行app应用开发中,在实现某些功能中要求实现悬浮窗功能,分为应用内悬浮窗 ,全局悬浮窗和 锁屏页面悬浮窗功能 等,接下来就来实现这些悬浮窗全屏功能,首选看下第二部分功能实现 2.kotlin实现锁屏页面悬浮窗全屏功能二分析 悬浮窗是属于Android系统的一种浮动窗…

dddssss

import cv2 from cvzone.PoseModule import PoseDetectorif __name__ __main__:# cap cv2.VideoCapture(2.mp4)cap cv2.VideoCapture(0)detector PoseDetector()posList []while True:success, img cap.read()img detector.findPose(img)# 获取33个点的每一帧放到lmList…

web渗透测试漏洞流程:目标域名CDN绕过

1.2.1 判断域名是否存在CDN 首先,要验证一个域名是否正在使用CDN服务,我们可以借助在线工具如ChinaZ的Ping服务(http://ping.chinaz.com/)来进行测试。当通过该工具查询到的IP地址不止一个时,这通常意味着显示的IP列表并非直接指向实际服务器的唯一真实IP。比如,若结果显…

jenkins配置源码管理的git地址时,怎么使用不了 credential凭证信息

前提 Jenkins使用docker部署 问题 &#xff08;在jenlins中设置凭证的方式&#xff09;在Jenkins的任务重配置Git地址&#xff0c;并且设置了git凭证,但是验证不通过&#xff0c;报错; 无法连接仓库&#xff1a;Command "git ls-remote -h -- http://192.1XX.0.98:X02/…

Compose UI 之 Checkbox 复选框 RadioButton 单选框

Checkbox 复选框 & RadioButton 单选框 Checkbox 复选框提供了在多个选项中选择一个或多个选项的作用。 RadioButton 单选框提供了在多个选项中只能选择一个选项的作用。 下面就分别来介绍下 Android Compose UI 库中的 Checkbox 复选框 和 RadioButton 单选框。 Radio…

C语言中的运算符优先级详解与使用示例

以下是C语言中运算符优先级的&#xff0c;以及对每个运算符的详细解释&#xff1a; 优先级运算符类别运算符描述1后缀() 函数调用 ( 数组下标 )函数调用、数组元素访问. 结构体成员访问 -> 结构体指针成员访问访问结构体的成员 后缀自增 -- 后缀自减自增或自减操作&#xf…

模拟实现字符串库函数(一)

在C语言的标准库中提供了很多针对字符串的库函数&#xff0c;这篇文章我们会学习并模拟实现几个简单的库函数 求字符串长度函数strlen strlen函数我们在之前已经用过很多次了&#xff0c;同时也模拟实现过&#xff0c;但是都不是模仿标准库中的strlen来实现&#xff0c;首先我…

IOS苹果开发者账号封号的规避心得,利用好防关联工具避免APP下架问题

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; 当涉及到避免 iOS 苹果开发者账号封号以及利用防关联工具来规避应用下架问题时&#xff0c;有一些具体的操作和注意事项可以帮助你更好地管理你的开发者账号和应用。 避免账号封号的规避心得&#xff1a; …

编程界的万能钥匙:揭秘程序员常用的超实用算法!

程序员常用的算法 引言一、排序算法&#xff1a;为数据秩序井然二、搜索算法&#xff1a;高效定位数据三、图算法&#xff1a;理解复杂网络结构四、动态规划&#xff1a;优化递归求解过程五、贪心算法&#xff1a;简单高效的局部最优解六、数据结构相关算法&#xff1a;必不可少…

2024-03-24 思考-MBTI-简要记录

摘要: 2024-03-24 思考-MBTI-简要记录 MBTI16型人格: MBTI16型人格在人格研究和评价中得到了广泛的应用。MBTI是一种基于瑞士心理学家荣格在理论基础上发展起来的人格分类工具。为了准确判断个人的心态偏好&#xff0c;将每个人分为16种不同的人格类型。这种分类方法不仅为我们…

Red and Black (DFS BFS)

//新生训练 #include <iostream> #include <algorithm> #include <bits/stdc.h> using namespace std; int a, b, sum; char c[20][20]; void dfs(int x, int y) {c[x][y] #;if (x - 1 > 0 && c[x - 1][y] .){sum;dfs(x - 1, y);}if (x 1 <…

vue2 脚手架

安装 文档&#xff1a;https://cli.vuejs.org/zh/ 第一步&#xff1a;全局安装&#xff08;仅第一次执行&#xff09; npm install -g vue/cli 或 yarn global add vue/cli 备注&#xff1a;如果出现下载缓慢&#xff1a;请配置npm 淘宝镜像&#xff1a; npm config set regis…

使用 STL 容器发生异常的常见原因分析与总结

目录 1、概述 2、使用STL列表中的元素越界 3、遍历STL列表删除元素时对迭代器自加处理有问题引发越界 4、更隐蔽的遍历STL列表删除元素时引发越界的场景 5、多线程同时操作STL列表时没有加锁导致冲突 6、对包含STL列表对象的结构体进行memset操作导致STL列表对象内存出异…