XStream
的安全框架未初始化,可能存在漏洞。
我在使用 XStream (1.4.10)
时一直收到这个控制台错误。
我尝试了以下方法:
XStream.setupDefaultSecurity(xs);
和
xs.addPermission(AnyTypePermission.ANY);
xs.addPermission(NoTypePermission.NONE);
但都解决不了问题。
我不需要任何高级的安全设置,只是想要消除警告。也许还要为 1.5.x
准备代码。
在处理安全问题时,我不会掉以轻心。首先要了解问题的严重性,这里有一篇好文章或者另一篇。
然后找出人们推荐的解决方案。开始的好地方是从xstream网站本身开始。在xstream security page上有一个示例,您可以将其用作起点。
这将是我的设置,基本上允许大多数您的代码。
XStream xstream = new XStream();
// clear out existing permissions and set own ones
xstream.addPermission(NoTypePermission.NONE);
// allow some basics
xstream.addPermission(NullPermission.NULL);
xstream.addPermission(PrimitiveTypePermission.PRIMITIVES);
xstream.allowTypeHierarchy(Collection.class);
// allow any type from the same package
xstream.allowTypesByWildcard(new String[] {
"com.your.package.**"
});
然而,经过更深入地研究他们的源代码后,这是我的看法:
XStream.setupDefaultSecurity(this); // to be removed after 1.5
xstream.allowTypesByWildcard(new String[] {
"com.your.package.**"
});
因此,升级到1.5后,您只需要一行代码。
请注意,根据您的应用程序反序列化场景,您可能需要更多的通配符。这不是一种通用答案,而是我认为一个很好的起点。
我曾经遇到同样的“问题”,并通过允许相关类型来解决:
Class<?>[] classes = new Class[] { ABC.class, XYZ.class };
XStream xStream = new XStream();
XStream.setupDefaultSecurity(xStream);
xStream.allowTypes(classes);
也许这对您有所帮助。
祝好运!
xstream.allowTypesByRegExp(new String[] { ".*" });