Java SAX解析器,如何完全阻止字符引用? (DoS攻击)

时间:2013-08-28 13:06:03

标签: java xml saxparser denial-of-service character-reference

需要验证传入请求的XML文件。一个要求是由于可能的DoS攻击而完全阻止了字符引用。如果我配置SAXParserFactory,如下所示:

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
然后,持票人仍然解决了100.000个实体扩张。

The parser has encountered more than "100.000" entity expansions in this document; this is the limit imposed by the application.

防止外部引用是通过EntityResolver完成的,可以正常工作。但是如何阻止字符引用呢?

2 个答案:

答案 0 :(得分:1)

字符引用不能导致拒绝服务攻击,因此没有理由阻止它们。

答案 1 :(得分:0)

org.apache.xerces.util.SecurityManager的实例可以限制实体扩展的数量。这是一个例子。

SAXParser saxParser = spf.newSAXParser();
org.apache.xerces.util.SecurityManager mgr = new org.apache.xerces.util.SecurityManager();
mgr.setEntityExpansionLimit(-1);
saxParser.setProperty("http://apache.org/xml/properties/security-manager", mgr);

这样,如果XML文件包含至少一个实体引用,则解析过程终止。现在不再需要EntityResolver

包含SecurityManager的jar文件可以下载here