gpt4 book ai didi

java - 忽略 XMLReader (XXE) 中的 XML 文档类型声明

转载 作者:行者123 更新时间:2023-11-30 10:37:10 27 4
gpt4 key购买 nike

我使用非验证读取来显示或处理不受信任的 XML 文档,我不需要支持内部实体,但我确实希望能够处理,即使显示了 DOCTYPE。

随着disallow DOCTYPE-decl feature SAX 我可以确保解析 XML 文档没有外部实体或 billion laughter DOS 扩展的风险。这也是OWASP XXE prevention cheat-sheet推荐的.

XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setFeature("http://apache.org/xml/features/continue-after-fatal-error", true);

reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

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

然而不幸的是,当给出 DOCTYPE 时,这会中止解析:

org.xml.sax.SAXParseException; systemId: file:... ; lineNumber: 2; columnNumber: 10;
DOCTYPE is disallowed when the
feature "http://apache.org/xml/features/disallow-doctype-decl" set to true.

如果我忽略这个 fatal error ,那么它将愉快地解析内部实体,正如您在此处看到的:https://gist.github.com/ecki/f84d53a58c48b13425a270439d4ed84a

我想知道,是否存在功能组合,以便我可以阅读但不评估文档类型声明(尤其是避免递归扩展)。

我希望避免定义我自己的特定于 Apache 的 security-manager 属性或特殊的解析器。

最佳答案

根据 core-lib-dev XMLReaderFactory 将在 Java 9 中弃用,获取 XMLReader 的方法将是使用 SAX 解析器。

在那种情况下FSP可以使用(它建立了一些资源限制并删除了 ACCESS_EXTERNAL_DTD_SCHEMA 的远程架构处理程序):

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setXIncludeaware(false);
// when FSP is activated explicit it will also restrict external entities
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
XMLReader reader = spf.newSAXParser().getXMLReader();

关于java - 忽略 XMLReader (XXE) 中的 XML 文档类型声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com