XStream 的安全框架未初始化,XStream 可能易受攻击

2022-09-01 03:50:51

Security framework of XStream not initialized, XStream is probably vulnerable

我在使用 XStream 时不断收到此控制台红色错误 (1.4.10)

我尝试了以下方法:

XStream.setupDefaultSecurity(xs);

xs.addPermission(AnyTypePermission.ANY); xs.addPermission(NoTypePermission.NONE);

没有一个摆脱它。

我不需要任何花哨的安全设置,我只想让这个警告沉默。也许还要为1.5.x准备代码


答案 1

在处理安全问题时,我不会掉以轻心。首先,人们会理解问题的严重性,在这里写一篇好文章另一篇

然后了解人们如何推荐解决方案。从xstream网站本身开始。有一个示例,您可以将其用作 xstream 安全页面上的起点。

这将是我的设置,基本上允许你的大部分代码。

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后,您只需要一行。

请注意,您可能需要更多通配符来适应您的应用程序反序列化方案。恕我直言,这不是一个放之四海而皆准的答案,而是一个很好的起点。


答案 2

我有同样的“问题”,并通过允许相关类型来解决它:

Class<?>[] classes = new Class[] { ABC.class, XYZ.class };
XStream xStream = new XStream();
XStream.setupDefaultSecurity(xStream);
xStream.allowTypes(classes);

也许这对您的情况也有帮助。

祝你好运!


推荐