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(但我不确定它是否与此相关)
“首次尝试”的解决方案:
它不起作用的原因是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不在乎支持的类!
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |