• 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);