我看到了許多使用XMLInputFactory,SAXParser和DocumentBuilderFactory的解決方案。我們的項目是春天的Web服務,我們唯一能做的是:防止使用Jaxb2Marshaller解析包含DTD的XML文件
@Bean
public Jaxb2Marshaller unmarshaller() {
Jaxb2Marshaller unmarshaller = new Jaxb2Marshaller();
unmarshaller.setContextPath("foo");
unmarshaller.setProcessExternalEntities(false);
return unmarshaller;
}
然後我們通過這個編組和解組到MarshallingPayloadMethodProcessor。所以我的問題是,如果Jaxb2Marshaller有一些屬性會阻止DTD。例如:unmarshaller.setProperty(foo.SUPPORT_DTD, false);
我們有.xsd模式,但在xml bomb的情況下,爲驗證目的需要擴展實體,所以看起來這不是解決方案。
部分在這裏回答:http://stackoverflow.com/questions/9909465/how-to-disable-dtd-fetching-using-jaxb2-0 – lexicore 2014-10-30 10:36:40