根据documentation,使用unserialize与不受信任的输入是不安全的。
作为测试,我写道:
<?php
global $secret;
$secret = 'SuperSecret';
class Thing {
public static function __wakeup() {
var_dump($GLOBALS);
}
public function __unserialize() {
return 'okay';
}
}
if (isset($_GET['s'])) {
echo 'serializing=';
echo serialize(new Thing() );
}
$unser = unserialize($_GET['thing']);
首先转到?s,然后显示:O:5:“Thing”:0:{}
转到?thing = O:5:“Thing”:0:{}它将显示所有全局变量 - 存在安全风险。
但是如果没有类具有这种不安全的__wakeup()函数呢?对于没有'不安全'__wakeup函数的(大多数)系统,不会安全地反序列化吗?
答案 0 :(得分:0)
这是一篇很好的文章。
https://www.alertlogic.com/writing-exploits-for-exotic-bug-classes/
基本上,反序列化可用于重写或更改对PHP或脚本很重要的类。