PHP7 增加了可以为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。
实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php class MyClass1 { public $obj1prop ; } class MyClass2 { public $obj2prop ; } $obj1 = new MyClass1(); $obj1 ->obj1prop = 1; $obj2 = new MyClass2(); $obj2 ->obj2prop = 2; $serializedObj1 = serialize( $obj1 ); $serializedObj2 = serialize( $obj2 ); // 默认行为是接收所有类 // 第二个参数可以忽略 // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象 $data = unserialize( $serializedObj1 , [ "allowed_classes" => true]); //转换为所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2 $data2 = unserialize( $serializedObj2 , [ "allowed_classes" => [ "MyClass1" , "MyClass2" ]]); print ( $data ->obj1prop); print (PHP_EOL); print ( $data2 ->obj2prop); ?> |
以上程序执行输出结果为:
1
2