限制unserialize()返回数组?

Cg *_*ive 2 php security serialization

有没有办法限制PHP的unserialize()只解析数组?出于安全考虑.假设在我不想调用的反序列化对象中有一个邪恶的__unserialize()魔术方法!

Pek*_*ica 5

有没有办法限制PHP的unserialize()只解析数组?出于安全考虑.假设在我不想调用的反序列化对象中有一个邪恶的__unserialize()魔术方法!

不是我知道的,不.

可以使用类似这样的函数找出序列化值的类型,但这也无济于事,因为数组的任何成员都可能再次成为反序列化将触发__wakeup()调用的对象.

您必须扩展该函数,以便遍历序列化字符串的所有成员,而无需实际序列化它.当然可能,但可能是kludgy和慢.

想到的唯一另一种方法是unserialize()在没有定义类的环境中进行调用.这将导致类的一个破坏的对象,__PHP_Incomplete_Class然后您可以解析.在普通的脚本环境中,这对您没有帮助.

也就是说,永远不要忘记序列化对象永远不会包含任何代码.类定义必须通过其他方式存在于您的代码库中.

有鉴于此,我不确定在什么情况下这可能是一个安全问题.如果你的代码库中有恶意代码,那么就有很多机会执行它而不必反序列化任何东西,不是吗?