当前位置: 首页 > 知识库问答 >
问题:

解组时无法使用SaxParser执行XML外部实体验证

司徒瀚
2023-03-14

您好,我尝试了以下代码来验证输入XML是否具有外部实体引用,但即使我提供了包含外部实体的XML输入,代码也不会引发任何异常

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Source;
import javax.xml.transform.sax.SAXSource;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

ByteArrayInputStream bais = new ByteArrayInputStream(<XML content here as byte array>);
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
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);
SAXParser saxParser = spf.newSAXParser();
XMLReader reader = saxParser.getXMLReader();
Source xmlSource = new SAXSource(reader, new InputSource(bais));
Unmarshaller jaxbUnmarshaller =
JAXBContext.newInstance(XXXX.class).createUnmarshaller();
return (XXXX) jaxbUnmarshaller.unmarshal(xmlSource);

也可以直接在XMLReader中设置功能

    SAXParserFactory spf = SAXParserFactory.newInstance();
    spf.setNamespaceAware(true);
    SAXParser saxParser = spf.newSAXParser();
    XMLReader reader = saxParser.getXMLReader();
    reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
    reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    Source xmlSource = new SAXSource(reader, new InputSource(bais));


Unmarshaller jaxbUnmarshaller =
    JAXBContext.newInstance(XXXX.class).createUnmarshaller();

return (XXXX) jaxbUnmarshaller.unmarshal(xmlSource);

两种方法都不起作用,并且没有抛出异常

如果有什么问题,请告诉我。我正在努力实现https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Unmarshaller

共有1个答案

帅银龙
2023-03-14

这是我们在ZAP中用于禁用外部实体处理的代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
factory.setExpandEntityReferences(false);

https://github.com/zaproxy/zaproxy/blob/develop/src/org/zaproxy/zap/utils/XmlUtils.java

 类似资料:
  • 为了防止XXE攻击,我禁用了Java DocumentBuilderFactory推荐的以下功能-https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention\u Cheat\u Sheet。 如果我没有将外部常规实体和外部参数实体设置为false,是否存在任何漏洞?因为当我们将disallow doctype decl设

  • 我正在尝试集成联邦快递API并得到这个错误。 警告:SoapClient::SoapClient()[SoapClient.SoapClient]:I/O警告:无法加载测试中的外部实体“./wsdl/RateService_v13.wsdl”。php在线12 致命错误:未捕获SoapFault异常:[WSDL]SOAP-ERROR:解析WSDL:无法从'.../wsdl/RateService_v

  • 我在fortify报告中收到了第4行的XML外部实体注入安全警告。不知道如何修复它。我对SOAP、JAXB和Marshaller很陌生。 第4行(XML外部实体注入)高问题详细信息王国:输入验证和表示扫描引擎:SCA(语义) 接收器详细信息接收器:解组() 提前感谢!

  • 问题内容: 我在veracode报告中得到了下一个发现:XML外部实体引用(’XXE’)(CWE ID 611)的不当限制引用了下面的代码 … … 我一直在研究,但是我还没有找到这个发现的原因或使它消失的方法。你能告诉我怎么做吗? 问题答案: 您是否看到过有关XXE的OWASP指南? 您没有禁用应禁用的3个功能。最重要的是第一个:

  • Hp fortify向我展示了以下代码中的XML外部实体注入: 在上面,它显示了以下行中的漏洞

  • XML 外部实体(XXE)漏洞涉及利用应用解析 XML 输入的方式,更具体来说,应用程序处理输入中外部实体的包含方式。为了完全理解理解如何利用,以及他的潜力。我觉得我们最好首先理解什么是 XML 和外部实体。 元语言是用于描述其它语言的语言,这就是 XML。它在 HTML 之后开发,来弥补 HTML 的不足。HTML 用于定义数据的展示,专注于它应该是什么样子。房子,XML 用于定义数据如何被组织