提问者:小点点

XML外部实体(XXE)-外部参数实体和外部通用实体漏洞


为了防止XXE攻击,我禁用了Java DocumentBuilderFactory推荐的以下功能-https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention\u Cheat\u Sheet。

        dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
        dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        dbf.setXIncludeAware(false);
        dbf.setExpandEntityReferences(false);

如果我没有将外部常规实体和外部参数实体设置为false,是否存在任何漏洞?因为当我们将disallow doctype decl设置为true,XIncludeAware设置为false时,它将不允许扩展这些外部实体。

从上面的代码中删除这两行是否安全-dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);或者强制保留它们。如果是强制性的,如果我们不将它们设置为false,会有什么漏洞?

请提供特定于外部-基因/参数-实体的漏洞示例,即使我们将dislow-doctype设置为true,将XColldeAware设置为false,并将ExportandEntity引用设置为false。


共1个答案

匿名用户

保留它们不是强制性的。设置不允许doctype decl将防止XXE攻击,因为不受信任的XML中的任何内联doctype声明都会导致解析器引发异常。

但是,我建议保持代码不变,因为默认情况下,外部常规实体和外部参数实体均为true。如果这两行代码不存在,而后来的维护人员(天真地或错误地)删除了第一行代码,那么代码就会再次受到攻击。如果有明确的其他行,则更可能在进一步修改时,维护人员将查找这些特性,我们希望了解它们存在的原因。