禁用DTD中的javax XML验证
我使用javax.xml.validation.Validator验证如下我的XML -禁用DTD中的javax XML验证
Validator validator = myschema.newValidator();
validator.validate(new StreamSource(new StringReader(xmlString)));
我想通过完全禁用的DTD(文档类型定义),以防止XML外部实体攻击,所以我就像验证器在我的xml中如果可能的话在DTD的情况下抛出异常一样。我已阅读使用DocumentBuilderFactory
这样做。我如何在Validator中进行配置?
按照OWASP XXE prevention spreadsheet为Java,下面应该工作:
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema myschema = factory.newSchema();
Validator validator = myschema.newValidator();
try {
validator.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
validator.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
validator.validate(new StreamSource(new StringReader(xmlString)));
} catch ...
参考XMLConstants
JavaDocs了解更多详情。
非常感谢! –
目前无法使用。我们得到这个例外 无法识别属性'http://javax.xml.XMLConstants/property/accessExternalDTD'。 –
@GaneshBhat - 您可能想要打开一个新的SA问题,发布您的设置详细信息,包括Java版本,XML提供程序供应商和版本等。如果您愿意,请随时链接。 – coastalhacking
为了不丢掉质量的安全。您可以使用[** XML目录**](https://en.wikipedia.org/wiki/XML_Catalog)作为DTD文件的本地(已检查)副本 –