不安全的反序化(Insecure deserialization)
什么是序列化?
序列化是将复杂数据结构(例如对象及其字段)转换为“更扁平”格式的过程,该格式可以作为顺序字节流发送和接收。序列化数据使以下操作变得更加简单:
- 将复杂数据写入进程间内存、文件或数据库
- 例如,通过网络、应用程序的不同组件之间或在 API 调用中发送复杂数据
不安全的反序列化漏洞是如何产生的?
通常会出现不安全的反序列化,因为人们普遍缺乏对反序列化用户可控数据的危险程度的理解。理想情况下,用户输入根本不应该被反序列化。
但是,有时网站所有者认为他们是安全的,因为他们对反序列化数据实施了某种形式的额外检查。这种方法通常是无效的,因为几乎不可能实施验证或清理来解决所有可能发生的情况。这些检查也存在根本性的缺陷,因为它们依赖于在反序列化后检查数据,在许多情况下,这对于阻止攻击来说为时已晚。