【发布时间】:2014-04-21 09:46:00
【问题描述】:
根据documentation,将反序列化与不受信任的输入一起使用是不安全的。
作为测试,我写道:
<?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 函数的(大多数)系统来说,反序列化不是安全的吗?
【问题讨论】:
-
你是在用这个解决方案解决一些特殊问题(然后你做错了)还是只是好奇?
-
试图理解为什么在代码中使用这很危险 - 看起来这里的解决方案应该有效:stackoverflow.com/questions/3874744/…
-
不使用是安全的
-
@zerkms 不,请参阅下面的答案。
-
是的,见上面的评论
标签: php class security oop serialization