RMI注册表筛选器拒绝java 8 update 121中的Rmi Configuration类

时间:2017-01-24 06:15:50

标签: java security rmi

Java 8更新121添加了用于反序列化,RMI注册表串行过滤器和RMI DGC Serail过滤器的部分过滤器,请参阅here

目前我正在尝试解组用于我们制作的Rmi配置的类。如果没有任何系统属性,过滤器不允许它并使用系统属性-Dsun.rmi.registry.registryFilter=<package_name>.**它仍然拒绝该类。日志消息是:

INFO: ObjectInputFilter REJECTED: class <package_name and class name>,     arraylength: -1, nRefs: 11, depth: 4, bytes: 837, ex: n/a

调试它是有问题的,因为我正在寻找没有Oracle提供的源代码的代码。我可以看到检查已经完成,但我无法看到类的过滤器是什么以及阈值是什么:

maxdepth=value - the maximum depth of a graph
maxrefs=value  - the maximum number of internal references
maxbytes=value - the maximum number of bytes in the input stream
maxarray=value - the maximum array length allowed

有没有其他方法可以正确应用此白名单?

2 个答案:

答案 0 :(得分:1)

我们也在运行RMI服务器。 我在代码中解决了问题,而不是在命令行上解决了问题,但是这两种方式都应该有效,我猜测shell globbing就是你的方式。

java.lang.System.setProperty("sun.rmi.registry.registryFilter", "java.**;<our package base>.**")

默认值(如果您没有指定过滤器道具)位于RMIRegistryImpl的源中: RMIRegistryImpl.registryFilter() 这只允许在RMI中注册9个基本Java类+基元的子类。但是使用此过滤器检查注册对象后面的整个可序列化对象图。数组限制为10000,最大树深为5。

如果在没有命名类白名单(例如&#34; maxdepth = 10000000&#34;)的情况下尝试注册过滤器,则仍会应用默认的白名单列表。

答案 1 :(得分:0)

为了避免这个错误,在 setDomainEnv.sh 中添加以下参数

-Dweblogic.oif.serialFilterMode=combine
-Dweblogic.oif.serialFilterScope=weblogic
-Dweblogic.oif.serialFilter=maxDepth=10000

这将覆盖 weblogic.oif.code 中默认定义为 100 的 maxdepth