Java 如何使用JAXB修复修复XXE漏洞时出现的这个解组异常?

Java 如何使用JAXB修复修复XXE漏洞时出现的这个解组异常?,java,xml,jaxb,xxe,Java,Xml,Jaxb,Xxe,我们应该处理的XML消息的格式如下: <?xml version="1.0" encoding="UTF-8"?> <ns0:MessageType xmlns:ns0="http://www.path.to/some/schema.xsd"> <ns0:NonRelevantBody> .... </ns0:NonRelevantBody> </ns0:MessageType> 事实证明,这会给你一个

我们应该处理的XML消息的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:MessageType xmlns:ns0="http://www.path.to/some/schema.xsd">
    <ns0:NonRelevantBody>
        ....
    </ns0:NonRelevantBody>
</ns0:MessageType>
事实证明,这会给你一个严重的XXE病例。因此,我们尝试了一些非常类似的东西DocumentBuilder、SAXParser等,用于禁用外部实体、Doctype声明等。所有人都给了我们上述同样的例外。无论如何,SAXParser的变化如下:

StringReader stringReader = new StringReader(xmlMessageAsString);

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

Source xmlSource = new SAXSource(spf.newSAXParser().getXMLReader(), new InputSource(stringReader));

JAXBContext context = new JAXBContext.newInstance(MessageObjectFactory.class);
Unmarshaller unmarshalr = context.createUnmarshaller();
this.messageTypeContent = (MessageTypeContent) unmarshalr.unmarshal(xmlSource);
com.xmlprocessor.MessageTypeContent类的代码如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "messageType",
    "messageApprovalType"
})
@XmlRootElement(name = "MessageType")
public class MessageTypeContent {
    // Likely irrelevant unless you say so.
}
我尝试了很多方法,包括添加namespace=“ns0”或namespace=”http://www.path.to/some/schema.xsd对于@XmlRootElement注释,它会在运行时导致相同异常的类似版本


请注意代码中没有语法错误。我所做的一切都是在把它变成一个问题的过程中发生的。我完全有可能是一个错过了一些外在基本知识的git。如果你能指出这一点,我将不胜感激。谢谢。

让sax解析器名称空间感知修复了以下问题:

spf.setNamespaceAware(true);
到头来,无事生非

spf.setNamespaceAware(true);