I/O 高级

限制哪些类可以被反序列化,以防止攻击。

✕ Java 8
// Dangerous: accepts any class
ObjectInputStream ois =
    new ObjectInputStream(input);
Object obj = ois.readObject();
// deserialization attacks possible!
✓ Java 9+
ObjectInputFilter filter =
    ObjectInputFilter.Config
    .createFilter(
        "com.myapp.*;!*"
    );
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
发现此代码有问题? 告诉我们。
🛡️

安全性

防止反序列化意外或恶意的类。

📏

粒度控制

按类名、包、深度和大小过滤。

🔧

全局或每流

在 JVM 级别或每个 ObjectInputStream 设置过滤器。

旧方式
接受所有内容
现代方式
ObjectInputFilter
自 JDK
9
难度
高级
反序列化过滤器
可用

自 JDK 9 起广泛可用(2017 年 9 月)

ObjectInputFilter 允许您对类进行白名单/黑名单管理,限制对象图深度、数组大小和总字节数。这保护应用程序免受反序列化攻击。

分享 𝕏 🦋 in