XStreamMarshaller的漏洞警告

Nic*_*las 5 spring xstream spring-batch spring-oxm spring-boot

当使用带弹簧批的XStreamMarshaller时,我收到以下消息:

Security framework of XStream not initialized, XStream is probably vulnerable.
Run Code Online (Sandbox Code Playgroud)

首先尝试:根据文档,我试图重置所有权限,但我仍然有相同的消息.此外,在解析XML文件时我没有安全性错误...所以我认为这段代码不起作用.这是一个代码示例:

XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.getXStream().addPermission(NoTypePermission.NONE);
Run Code Online (Sandbox Code Playgroud)

第二次尝试:我也尝试过该setSupportedClasses方法,但它也不起作用(我仍然得到漏洞消息,并且不支持的类仍然无法正确排除):

XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.setSupportedClasses(FooBar.class);
Run Code Online (Sandbox Code Playgroud)

如何使用XStreamMarshaller设置安全权限?

注意:根据这个帖子,安全框架是在1.4.7中引入的,它仍然不是强制性的......但它对XStream 1.5.0是强制性的!

使用的XStream版本:1.4.10

使用的Spring Batch版本:4.0.1

有关信息,我使用的是Spring Boot(但我不确定它是否与此相关)

Nic*_*las 5

“首次尝试”的解决方案:

它不起作用的原因是XStreamMarshaller实例化了一个xstream对象,afterPropertiesSet而没有检查是否已经创建了一个对象,因此我们不能getXStream()在@Bean方法中使用它。为了使此工作有效,例如,我们可以在将编组器注入另一个bean的同时设置安全性配置:

@Configuration
public class JobSecurityConfig {

    public JobSecurityConfig(XStreamMarshaller marshaller) {
        XStream xstream = marshaller.getXStream();
        XStream.setupDefaultSecurity(xstream);
        xstream.allowTypes(new Class[]{Bar.class});
    }

}
Run Code Online (Sandbox Code Playgroud)

另一个解决方案:扩展XSreamMarshaller

您还可以XStreamMarshaller仅扩展和覆盖customizeXStream()设置安全配置的方法。

    @Override
    protected void customizeXStream(XStream xstream) {
        XStream.setupDefaultSecurity(xstream);
        xstream.allowTypes(new Class[]{Bar.class});
    }
Run Code Online (Sandbox Code Playgroud)

为什么“第二次尝试”不起作用:

setSupportedClasses仅用于编组!! .. StaxEventItemReader不在乎支持的类!