在jdk1.6中,我在设置的时候
transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)
我遇到了以下错误:
javax.xml.transform.TransformerConfigurationException: Cannot set the feature 'http://javax.xml.XMLConstants/property/accessExternalDTD' on this TransformerFactory. at org.apache.xalan.processor.TransformerFactoryImpl.setFeature(TransformerFactoryImpl.java:418)
与我在这里找到的一样:How to prevent xalan.jar that has META-INF\services\javax.xml.transform.TransformerFactory from taking over JDK 1.6 built in Xalan implementation? 我无法进行此处建议的更改,因为我的管理员已审查过其他 API 冲突。
根据此链接:http://xml.apache.org/xalan-j/features.html#domsource
您可以使用 TransformerFactory.setFeature(String, boolean)
方法来设置特征的值。 Xalan-Java 仅支持设置 XMLConstants.FEATURE_SECURE_PROCESSING
功能。对于所有其他功能,TransformerFactory 公开它们的值,但不能更改它们的状态。
因此,如果使用 TransormerFactory 的 xalan 实现,我们似乎只能设置此功能。
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
最后是我的问题: 如果我们设置功能:
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
然后是另一个功能 (XMLConstants.ACCESS_EXTERNAL_DTD
) 自动设置为 false。
我从我设置的日志中得到上述功能为“假”。
但我想确定 accessExternalDTD
功能是否默认设置为 false,或者安全处理功能是否设置为 true。
最佳答案
在 Java 8 中是的。如果我们设置
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
然后属性 ACCESS_EXTERNAL_DTD
,ACCESS_EXTERNAL_STYLESHEET
设置为 ""
,如 owasp guide推荐。
我们可以通过以下方式验证它:
Object hasExternalDtd=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_DTD);
Object hasExternalStyle=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);
设置FEATURE_SECURE_PROCESSING
功能后。
如果我们不设置它,则两个属性的默认值为 all
。
关于java - 在 transformerFactory 中设置 FEATURE_SECURE_PROCESSING 是否也会更新其他安全功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29924050/