使用SAX解析器解析XML时解决安全问题

6
我有一个安卓应用程序,用户可以输入任何xml源URL进行解析。如果XML有效,我的应用程序将解析它并显示结果。
问题是,如果用户输入不受信任的XML源URL,则可能会影响应用程序和/或设备。
有什么最好的方法来识别风险并防止利用?
通过我的研究,我发现启用FEATURE_SECURE_PROCESSING和禁用扩展可能会有所帮助。但是,有人能告诉我这是什么,并且如何实现吗?
谢谢。

你是否使用模式来验证XML内容? - user849425
2个回答

6

经过调查研究,我找到了以下内容。希望它能解决我的问题。

启用FEATURE_SECURE_PROCESSING

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

禁用DTDs

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

2
这真的有效吗?我在执行时遇到了异常。 - digitizedx
@digitizedx 你能够解决这个异常吗?我遇到了javax.xml.parsers.ParserConfigurationException: http://apache.org/xml/features/disallow-doctype-decl。 - Arpit Garg
@ArpitGarg。不,OWASP建议一些替代方案。因此,我只是遵循https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXP_DocumentBuilderFactory.2C_SAXParserFactory_and_DOM4J。 - digitizedx

2
  • 对于SAXDOM解析器,禁止使用DTD应该足够,正如dcanh121所指出的。

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

  • 对于StAX解析器:

    factory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接