序列化漏洞(Insecure Deserialization)通常指程序在反序列化不可信数据时,攻击者可构造恶意对象,导致远程代码执行(RCE)、权限提升、拒绝服务等。下面从原理 → 防护措施 → 常见语言实践系统讲一下。
不要反序列化不可信来源的数据
这是最根本的一条。
unserialize、Python pickle)传输或存储外部数据✅ JSON ≠ 自动安全,但不会直接还原对象
只允许指定类型被反序列化:
ObjectInputFilter(JDK 9+)allowed_classes 参数SerializationBinder❌ 不要使用“允许所有类”
对序列化数据:
data = encrypt( serialize(obj) )
token = HMAC(data, secret)
校验失败直接拒绝。
readObject 自定义危险逻辑__wakeup、__destructObjectInputFilter filter =
ObjectInputFilter.Config.createFilter("com.xxx.SafeClass;!*");
ObjectInputStream ois = new ObjectInputStream(in);
ois.setObjectInputFilter(filter);
✅ 使用 JSON(Jackson / Gson)代替原生序列化
❌ 避免 Fastjson 早期版本
$data = unserialize($str, [
"allowed_classes" => ["User"]
]);
❌ 不要:
unserialize($_COOKIE['data']);
❌ 不要:
pickle.loads(data)
✅ 用:
json.loads(data)
BinaryFormatter ❌(已不推荐)System.Text.Json ✅SerializationBinder 限制类型防序列化漏洞 = 不反序列化不可信数据 + 白名单 + 签名 + 不用危险库
如果你愿意,可以告诉我你用的是 Java / PHP / Python / .NET,我可以直接给你可落地的代码级防护方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。