brumann/ polyfill-unserialize
将PHP 7.0中引入的unserialize选项向后移植到旧版本的PHP。
Requires
- php: ^5.3|^7.0
README
将PHP 7.0中引入的unserialize选项向后移植到旧版本的PHP。最初这是为Symfony Issue #21090 设计的一个概念验证。
您可以在依赖PHP 7.0以下版本的项目中使用此包。如果您使用的是PHP 7.0+,则将使用原始的unserialize()
。
来自文档
警告
不要将不受信任的用户输入传递给unserialize(),无论allowed_classes的选项值如何。反序列化可能会导致代码被加载和执行,因为对象实例化和自动加载,恶意用户可能能够利用这一点。如果您需要将序列化数据传递给用户,请使用安全的、标准的数据交换格式,例如JSON(通过json_decode()和json_encode())。
要求
- PHP 5.3+
安装
您可以通过composer安装此包
composer require brumann/polyfill-unserialize "^2.0"
旧版本
您可以在具有相同名称的分支中找到最新的1.x版本
升级
从1.x升级到2.0应该是无缝的,并且不需要修改使用此库的代码。公共API没有变化,即类、方法和参数的名称以及参数顺序和类型保持不变。2.x版本使用完全不同的方法来替换不允许的类,因此我们选择使用新的主要版本,以防止在现有安装中由于未知副作用而产生问题。
已知问题
当$options
中的allowed_classes
不是正确的类型(数组或布尔值)时,行为不匹配。PHP 7.0不会发出警告,即提供了无效的类型。此库将触发一个警告,类似于PHP 7.1+将引发的警告,然后继续,假定false
以确保不会意外地反序列化任何类。
测试
您可以使用PHPUnit运行测试套件。故意不将其捆绑为开发依赖项,以确保此包对实现系统的限制尽可能低。
请阅读PHPUnit手册以获取有关如何在您的系统上安装它的信息。
请确保选择兼容的版本。如果您使用PHP 5.6,应使用PHPUnit 5.7.27,对于较旧的PHP版本,应使用PHPUnit 4.8.36。较旧的PHPUnit版本可能不支持命名空间,这意味着它们将无法与测试一起使用。较新版本仅支持PHP 7.0+,在此库不再需要。
您可以按如下方式运行测试套件
phpunit -c phpunit.xml.dist tests/
贡献
此包被认为是功能完整的。因此,除非有安全问题,否则我可能不会更新它。
如果您发现任何错误或有问题,请随时在GitHub上提交问题或拉取请求。
开发设置
此库包含用于开发目的的docker设置。这允许在不需要本地安装的情况下在较旧的PHP版本上运行代码。
您可以使用以下方式使用此设置
-
进入项目目录
-
构建docker镜像
docker build -t polyfill-unserialize .
这将下载一个已安装PHP 5.6的debian/jessie容器。然后,它将下载适用于此PHP版本的相应版本的phpunit。它还将下载composer。它将工作目录设置为
/opt/app
。生成的镜像被标记为polyfill-unserialize
,这是我们在运行容器时将引用的名称。 -
然后,您可以根据该镜像运行一个容器,该容器将运行您的测试
docker run -it --rm --name polyfill-unserialize-dev -v "$PWD":/opt/app polyfill-unserialize
这将基于我们之前构建的镜像运行一个Docker容器。在phpunit完成后,容器将被自动删除。我们将镜像命名为
polyfill-unserialize-dev
。这确保只有一个实例正在运行,并且我们可以通过名称轻松识别一个正在运行的容器,例如,为了手动删除它。我们将当前目录挂载到容器的当前工作目录。这确保测试在当前项目状态上运行。
您可以反复执行最后一步,以运行测试。输出应类似于以下内容
dbr:polyfill-unserialize/ (improvement/dev_setup*) $ docker run -it --rm --name polyfill-unserialize-dev -v "$PWD":/opt/app polyfill-unserialize Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Nothing to install or update Generating autoload files PHPUnit 5.7.27 by Sebastian Bergmann and contributors. ...................... 22 / 22 (100%) Time: 167 ms, Memory: 13.25MB OK (22 tests, 31 assertions)
当您完成项目的开发后,可以通过删除最初构建的镜像来释放磁盘空间
docker image rm polyfill-unserialize