需要验证传入请求的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
完成的,可以正常工作。但是如何阻止字符引用呢?
答案 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。