JEP 290是 oracle提供已一套JAVA反序列化机制,其并不是一种必须被强制执行的策略,而是需要程序员或者运维人员进行开发与启用。关于该机制的优缺点借用老外的一篇文章
https://dzone.com/articles/a-first-look-into-javas-new-serialization-filterin
中文版可以参考
该机制提供了三种防御策略,分别是全局过滤器、自定义过滤器以及内置过滤器
全局过滤器
该过滤器可以通过三种方法进行启用,
- 启动应用时通过指定参数
-Djdk.serialFilter=<白名单类1>;<白名单类2>;!<黑名单类>
- 设置环境变量
$JAVA_HOME/jre/lib/security/java.security
- 启动时指定策略文件
-Djava.security.properties=<黑白名单配置文件名>
关于java.security文件提供了主要提供了两种策略,一种是限制类调用的深度与数量,二是通过黑白名单进行限制
自定义过滤器
程序员可在编码是使用ObjectInputStreamFilter
指定反序列化黑白名单ObjectInputFilter filesOnlyFilter = ObjectInputFilter.Config.createFilter("de.mogwailabs.Example;!*");
内置过滤器
其实第一张图里面就是一些内置过滤器,当然截图不全,如果要启动去掉注释即可