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