[关闭]
@Chiang 2020-02-17T12:48:51.000000Z 字数 736 阅读 622

PHP 过滤 unserialize()

PHP7新特性 2020-02


PHP 7 增加了可以为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。

  1. <?php
  2. class MyClass1 {
  3. public $obj1prop;
  4. }
  5. class MyClass2 {
  6. public $obj2prop;
  7. }
  8. $obj1 = new MyClass1();
  9. $obj1->obj1prop = 1;
  10. $obj2 = new MyClass2();
  11. $obj2->obj2prop = 2;
  12. $serializedObj1 = serialize($obj1);
  13. $serializedObj2 = serialize($obj2);
  14. // 默认行为是接收所有类
  15. // 第二个参数可以忽略
  16. // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象
  17. $data = unserialize($serializedObj1 , ["allowed_classes" => true]);
  18. // 转换所有对象到 __PHP_Incomplete_Class 对象,只允许 MyClass1 和 MyClass2 转换到 __PHP_Incomplete_Class
  19. $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
  20. print($data->obj1prop);
  21. print(PHP_EOL);
  22. print($data2->obj2prop);
  23. ?>
  24. 以上程序执行输出结果为:
  25. 1
  26. 2

参考资料:
PHP 过滤 unserialize()

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注