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

如何解决“XML外部实体引用('XXE')的不当限制”

凌黎明
2023-03-14

我正试图修复veracode在我的web应用程序中列出的所有漏洞。我被困在这个我实际上不知道的特别的弱点上。对XML外部实体引用的限制不正确。请帮我解释一下代码的问题,以及我们可以解决这个问题的方法?

    Object objec = null;

    try {
        JAXBContext jContext = JAXBContext.newInstance(context);
        Unmarshaller unmarshaller = jContext.createUnmarshaller();
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
        objec = unmarshaller.unmarshal(inputStream);  //Vulnerability reported in this line

    } catch (JAXBException e) {
        e.printStackTrace();
    }

    return objec;
}

共有1个答案

羊光辉
2023-03-14

这是获得解决方案的一个很好的参考:https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#java

例如,在您的示例中,只需将这两个财产添加XMLInputFactory和流读取器中:

        final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
        // These 2 properties are the key
        xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
        xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
        // Your stream reader for the xml string
        final XMLStreamReader xmlStreamReader = xmlInputFactory
                .createXMLStreamReader(new StringReader(yourXMLStringGoesHere));
        final NsIgnoringXmlReader nsIgnoringXmlReader = new NsIgnoringXmlReader(xmlStreamReader);
        // Done with unmarshalling the XML safely
        final YourObject obj = (YourObject) unmarshaller.unmarshal(nsIgnoringXmlReader);

这应该有助于Veracode扫描

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

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

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

  • 请给我一个提示,为什么我的代码不容易受到XXE的攻击。 代码: 测试用例1: 结果1: 到现在为止,一直都还不错。但是,当我尝试注入XML代码以检索本地文件的内容时: 然后什么都不打印。“test.txt”在文件结构中与我执行攻击的php文件处于同一级别。我已经尝试过了 以及 但无济于事。 test.txt: 已尝试: 没有结果。 有什么提示吗? 反映保罗·克罗维拉,这里有一个编辑: CP-ing

  • 该产品处理一个XML文档,该文档可以包含URL解析为预期控制范围之外的文档的XML实体,从而导致该产品在其输出中嵌入不正确的文档<默认情况下,XML实体解析器将尝试解析和检索外部引用。如果攻击者控制的XML可以提交给这些函数之一,则攻击者可以访问有关内部网络、本地文件系统或其他敏感数据的信息。这称为XML外部实体(XXE)攻击。 什么都没有

  • 我们对我们的代码进行了安全审计,他们提到我们的代码容易受到外部实体(XXE)攻击。 解释-XML外部实体攻击得益于XML功能,可以在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,

  • 我每次都会再次遇到这个错误,尽管我将代码更改为我在网上找到的代码,如下所示:

  • 当我在此程序上运行HP Fortify时: 我得到这个错误: 在ItemServlet中配置的XML解析器。92不会阻止或限制外部实体的解析。这会使解析器受到XML外部实体攻击。 根据这个博客,应该设置以下功能。 但问题是,我的TransformerFactory实例不支持这种方法。