0

0

PHP变量怎么反序列化_PHP变量反序列化操作说明【详解】

星夢妙者

星夢妙者

发布时间:2026-02-17 14:25:02

|

151人浏览过

|

来源于php中文网

原创

php反序列化存在安全风险,需严格校验输入;serialize()将变量转为字符串,unserialize()还原变量并可能调用__wakeup()等魔术方法;推荐用json替代以避免对象实例化风险,并通过白名单限制允许类名。

php变量怎么反序列化_php变量反序列化操作说明【详解】

如果PHP应用中存在反序列化操作,且传入的序列化字符串未经过严格校验,则可能触发不安全的反序列化行为。以下是PHP变量反序列化的基础操作说明:

一、理解serialize()与unserialize()函数作用

PHP内置的serialize()函数将变量转换为可存储或传输的字符串格式;unserialize()函数则执行逆向操作,将该字符串还原为原始变量结构。此过程依赖字符串中精确编码的类型标识与数据长度,任何格式偏差均会导致解析失败或异常行为。

1、定义一个包含数组和对象的变量:
$data = ['name' => 'Alice', 'age' => 30, 'scores' => [85, 92, 78]];

2、调用serialize()生成序列化字符串:
$serialized = serialize($data);

立即学习PHP免费学习笔记(深入)”;

3、输出结果示例:
a:3:{s:4:"name";s:5:"Alice";s:3:"age";i:30;s:6:"scores";a:3:{i:0;i:85;i:1;i:92;i:2;i:78;}}

二、使用unserialize()还原变量

unserialize()函数接收合法的序列化字符串作为参数,按PHP内部规则重建原始变量结构,并返回对应类型的值。该函数不执行代码,但若字符串中包含对象类名且该类已定义,则会实例化对象并调用__wakeup()方法(如存在)。

1、将上一步得到的$serialized赋值给新变量:
$str = 'a:3:{s:4:"name";s:5:"Alice";s:3:"age";i:30;s:6:"scores";a:3:{i:0;i:85;i:1;i:92;i:2;i:78;}}';

2、执行反序列化:
$restored = unserialize($str);

3、验证还原结果:
var_dump($restored);

三、处理含自定义类的对象反序列化

当序列化字符串中包含对象时,unserialize()需确保对应类已加载,否则抛出致命错误。若类中定义了__unserialize()(PHP 8.1+)或__wakeup()方法,这些魔术方法将在反序列化完成后自动调用。

NoCode
NoCode

美团推出的零代码应用生成平台

下载

1、声明一个具有__wakeup()方法的类:
class User { public $username; public function __wakeup() { $this->username = strtoupper($this->username); } }

2、序列化该类实例:
$user = new User(); $user->username = 'bob'; $s = serialize($user);

3、反序列化后检查属性变化:
$u = unserialize($s); echo $u->username; // 输出BOB

四、使用JSON替代方案进行安全数据交换

对于仅需传输简单数据结构的场景,推荐使用json_encode()与json_decode()代替serialize/unserialize,因其不支持对象实例化、无魔术方法调用风险,且跨语言兼容性更强。

1、将数组转为JSON字符串:
$json = json_encode(['id' => 123, 'active' => true]);

2、反解JSON字符串为关联数组:
$arr = json_decode($json, true);

3、确认结果类型与内容:
var_dump($arr['id']); // 输出123

五、检测并防止不安全反序列化

在接收外部输入(如cookie、POST字段、文件内容)用于unserialize()前,必须验证其来源可信性与格式合法性。可采用白名单机制限制允许反序列化的类名,或改用更安全的数据格式。

1、检查输入是否为空或非字符串:
if (!is_string($input) || empty($input)) { die('Invalid input'); }

2、预设允许反序列化的类名列表:
$allowed_classes = ['User', 'Config'];

3、使用unserialize()的第二个参数(PHP 7.4+)限定类名范围:
$data = unserialize($input, ['allowed_classes' => $allowed_classes]);

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

442

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

815

2023.08.22

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6466

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

362

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2024.02.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

283

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号