对于所有系统,反序列化真的不安全吗?

时间:2014-03-16 05:04:09

标签: php class security oop serialization

根据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函数的(大多数)系统,不会安全地反序列化吗?

1 个答案:

答案 0 :(得分:0)

这是一篇很好的文章。

https://www.alertlogic.com/writing-exploits-for-exotic-bug-classes/

基本上,反序列化可用于重写或更改对PHP或脚本很重要的类。