0

需要验证传入请求的 XML 文件。一项要求是完全阻止字符引用,因为可能会受到 DoS 攻击。如果我配置SAXParserFactory如下:

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

那么 parer 仍然解决了 100.000 个实体扩展。

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

防止外部引用是通过一个EntityResolver可以正常工作的。但是如何防止字符引用?

4

2 回答 2

1

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

于 2013-08-28T20:04:17.070 回答
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.

包含 的 jar 文件SecurityManager可以在这里下载。

于 2013-08-28T23:01:33.003 回答