限制 unserialize() 返回数组?

2024-01-21

有没有办法限制 PHP 的 unserialize() 只解析数组? 出于安全原因。假设在未序列化的对象中有一个邪恶的 __unserialize() 魔术方法,我不想调用!


有没有办法限制 PHP 的 unserialize() 只解析数组?出于安全原因。假设在未序列化的对象中有一个邪恶的 __unserialize() 魔术方法,我不想调用!

据我所知,没有。

可以使用类似的函数找出序列化值的类型this one https://www.php.net/manual/en/function.unserialize.php#96938,但这也不会帮助你,因为数组的任何成员都可能再次成为一个对象,其反序列化将触发__wakeup() call.

您必须扩展该函数,以便它遍历序列化字符串的所有成员,而无需实际序列化它。当然可能,但可能会很混乱且缓慢。

我想到的唯一的其他方法是unserialize()在未定义类的环境中调用。这将导致该类的对象损坏__PHP_Incomplete_Class然后你就可以解析出来。然而,在正常的脚本环境中,这对您没有帮助。

也就是说,永远不要忘记序列化对象永远不会包含任何代码。类定义必须通过其他方式出现在您的代码库中。

鉴于此,我不确定在什么情况下这首先会成为安全问题。如果您的代码库中有恶意代码,那么就有很多机会执行它而无需反序列化任何内容,不是吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制 unserialize() 返回数组? 的相关文章

随机推荐

  • 使用正则表达式从字符串中删除数字

    我正在尝试从字符串中删除未附加到单词的所有数字 例子 python 3 gt python python3 gt python3 1something gt 1something 2 gt 434 gt python 35 gt pytho
  • Rails 3:如何使用 Rails 在数据库中插入记录

    我是 Rails 新手 我正在尝试学习这项技术 所以如果问题很愚蠢 请原谅 我正在使用 Rails 3 请让我知道如何在数据库中插入记录 我正在使用 postgresql 下面是学生表的表结构 SELECT column name FROM
  • 如何启用 mongodb cli 漂亮打印? - db.col.find().pretty() 不工作

    使用 mongo v2 4 5 shell db col find pretty 在 osx 控制台或 linux ubuntu 12 04 bash 上都不能很好地打印 使用和不使用 Pretty 的输出没有差异 gt db people
  • 使用 C# 填充引导下拉列表

    如何从代码隐藏填充引导下拉列表 现在我正在尝试这个 HtmlGenericControl li for int x 3 x lt 10 x li new HtmlGenericControl li li Attributes Add cla
  • 在 TypeScript 中将 JSON 文件导入为 const

    我想从数组元素的属性创建一个联合类型 如果数组是内联的 那么使用常量断言就非常简单 const arr name One name Two as const type name typeof arr number name name One
  • ply lexmatch 正则表达式与通常的 re 有不同的组

    我正在使用 ply 并注意到存储在 t lex lexmatch 中的令牌 re 匹配与 re 模块以通常方式定义的 sre pattern 之间存在奇怪的差异 组 x 似乎偏离了 1 我定义了一个简单的词法分析器来说明我所看到的行为 im
  • 查找邮政编码指定距离内的所有邮政编码

    我知道这个问题听起来像是这里几个问题的重复 但这些问题都没有回答我想要的 我有兴趣知道是否有人知道如何在指定邮政编码的半径内找到其他邮政编码 我有带有纬度和经度的邮政编码数据库 但我不知道如何在 VB net 中执行此操作 例如 90069
  • WebAPI 混合隐式流程和客户端凭证流程

    我有一个 WebAPI 解决方案 可以通过 Authorize 属性保护其控制器方法 它验证给定用户是否具有适当的角色 这些角色基本上是来自 IdentityServer3 的声明 有多个单页应用程序客户端与此 WebAPI 交互 并且使用
  • x509 Go 包 - ParsePKIXPublicKey 是 DER 还是 PEM?

    我正在尝试获取 rsa PublicKey 的对象 并且执行了以下步骤 BEGIN RSA PUBLIC KEY END RSA PUBLIC KEY package main import crypto rand crypto rsa c
  • 浏览器自动填充选项与角度材质自动完成选项重叠

    在有角度的材料中 材料自动完成工作正常 但浏览器自动填充选项与材料自动完成弹出窗口重叠 如何在不关闭浏览器自动填充的情况下关闭特定应用程序的自动填充 附参考图片 它也工作
  • Django 1.8:删除迁移文件夹后未检测到迁移

    我不小心删除了 migrations 文件夹 现在 python manage py makemigrations 无法检测到我的模型中的更改 我该怎么办 shubham shubham PC Documents try ecommerce
  • 片段包接收空值

    我有两个片段 我想将数据从一个片段传递到另一个片段 该捆绑包在发送时具有第一个片段的值 但不在另一个片段中接收 以下是代码 第一个片段 public View onCreateView NonNull LayoutInflater infl
  • TomEE CDI @Inject NullPointerException

    我试图让 CDI 在我的应用程序中工作 但是当我这样做时 我只得到 NullPointerExceptions 当正常实例化 playlistService 时 它 工作得很好 但是当我尝试使用 CDI 时 它就不再工作了 服务器能够启动
  • 让 2 个不同的父实体通过 JPA 中的 @OneToMany 引用子实体

    我有一个有点奇怪的问题 我不知道JPA是否支持这个 我有一个 Entity Child和另外两个实体 Entity Parent1 and Entity Parent2 我想做的是有一个 OneToMany父母和孩子之间的关系 以及另一个
  • 使用 Google datalab 读取文件

    我正在尝试使用 Google Datalab 读取 ipython 笔记本中的文件 基本的 pd read csv 因为我找不到文件的路径 我把它放在本地 并将其上传到谷歌云存储的一个桶中 我运行了以下命令来了解我在哪里 os getcwd
  • 调用外部意图(相机)时调试器断开连接

    我正在尝试调试我的应用程序 因为从我调用相机意图到拍摄照片时发生了一些事情 并且我的应用程序在返回时强制关闭 问题是 当调用相机意图时 调试器会立即断开连接 并且我无法再调试我的应用程序 我正在设备上调试 而不是模拟器上 我在谷歌中发现了这
  • 将图像添加到 JavaFX 特定位置的按钮

    当我向按钮添加图像和文本时 默认情况下元素是水平设置的 如何更改此行为以在图像下获取文本 Set the 内容显示属性 http docs oracle com javafx 2 api javafx scene control Label
  • gitk 中“标记此提交”是什么意思?

    使用 gitk 时 可以在日志窗格中选择提交 右键单击上下文菜单会提供 标记此提交 那有什么作用 查看以下选项 返回标记 找到它的后代并标记 与标记的提交进行比较
  • iOS 8 + 交互式过渡 + 显示的导航栏 = 损坏?

    我们正在尝试在我们的应用程序中添加两个视图之间的交互式过渡 我们可以让它在 iOS 7 或 iOS 8 上正常工作不显示导航栏 但是 我们需要显示一个导航栏 为了演示我们遇到的 一些 问题 我创建了一个小型原型 屏幕截图如下所示 我尝试了
  • 限制 unserialize() 返回数组?

    有没有办法限制 PHP 的 unserialize 只解析数组 出于安全原因 假设在未序列化的对象中有一个邪恶的 unserialize 魔术方法 我不想调用 有没有办法限制 PHP 的 unserialize 只解析数组 出于安全原因 假