Fastjson 的 AutoType 特性允许在 JSON 中通过 @type 指定任意类实例化,历史上多次被利用构造 Gadget 链实现 RCE。防御需在 JVM 层启用 JEP 290 ObjectInputFilter 白名单,并在 Fastjson 侧彻底关闭 AutoType。
一、Fastjson 安全配置与 JEP 290 全局过滤器
java
// Fastjson 2.x:显式关闭 AutoType,仅允许白名单
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
// JVM 启动参数强制全局反序列化过滤器(对所有 ObjectInputStream 生效)
// -Djdk.serialFilter=com.example.dto.*;java.base/*;!*java
// 代码级 ObjectInputFilter 白名单示例
ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(
"com.example.dto.*;java.lang.String;java.util.ArrayList;!*"
);
ObjectInputFilter.Config.setSerialFilter(filter);
try (ObjectInputStream ois =