outragelib / unserialize
修复对象 __wakeup 和 unserialize 时的混乱问题
v1.0.0
2018-07-13 01:02 UTC
Requires
- myclabs/php-enum: ^1.6
- nette/tokenizer: ^3.0@dev
Requires (Dev)
- phpstan/phpstan: ^0.10.1
- phpunit/phpunit: ^7.2
This package is not auto-updated.
Last update: 2024-09-20 03:18:09 UTC
README
所以,PHP 有一种方法可以反序列化数据。但是,由于一种修复可能引起崩溃和/或 RCE 的数据反序列化问题的方法,不能改变对象序列化方式...直到现在。
我对 PHP 内部工作原理不太了解(所以我说不好...把它做成一个插件),但我为您这些疯狂的人们做了另一件事,那就是把它做成一个类,可以通过 composer 导入 - 并且可以反序列化过去使用过 __sleep 或 __wakeup 的对象,以及由于某种原因不再使用 Serializable 接口的对象。
使用方法与正常的序列化完全相同,如下所示
<?php
class A
{
public $hello = "world";
}
$serialized = serialize(new A());
$object = (new \OUTRAGElib\Unserialize\Parser())->unserialize($serialized);
当然,在这种情况下你不会注意到任何区别,但是,如果由于开发原因,类被更改为实现 Serializable,那么对 unserialize 的任何调用通常会返回 false,但这个库能够解决这个问题。
此外,如果你想只是得到序列化输出的新副本,调用 \OUTRAGElib\Unserialize\Parser::parse 方法 - 它的行为与 unserialize 方法相同,但实际上并没有将字符串转换为对象代码。
我还没有添加测试,但这个脚本可以快速反序列化一个非常大的文档,因为实际标记化某物多次的开销过大。
无论如何,我以 MIT 许可证发布这个库 - 如果你实际上觉得这个库很有用(而不是我打算用它来做什么),请随时告诉我,我会很高兴的。
(修复 PHP 缺陷: https://bugs.php.net/bug.php?id=76606)