我的产品进行了安全审核,他们发现了一个漏洞,他们的建议是应安全配置XML解析器,以便它不允许文档类型定义(DTD)自定义实体和外部实体作为传入的一部分XML文档。
通过实现以下内容,我能够解决XML TransformerFactory的问题:
TransformerFactory transFact = TransformerFactory.newInstance();
transFact.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transFact.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer trans = transFact.newTransformer(xsltSource);
trans.transform(xmlSource, result);
但是他们指的是一个代码,我没有任何线索来解决这个问题。
public static DOMSource parse(String xmlPayload) throws ResourceException {
try {
DOMParser oracleDomParser = new DOMParser();
oracleDomParser.parse(new StringReader(xmlPayload));
Document doc = oracleDomParser.getDocument();
return new DOMSource(doc.getDocumentElement());
} catch (Exception e) {
throw new ResourceException(e.getMessage());
}
}