java - 在 transformerFactory 中设置 FEATURE_SECURE_PROCESSING 是否也会更新其他安全功能?

标签 java xerces xalan

在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_DTDACCESS_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/

相关文章:

java - 使用 Google Collections "No suitable method found for uniqueIndex..."将列表转换为 map (获取类型一致的问题)

java - 为什么 Grails 需要 Xerces?

c++ - 将原始指针转换为 clone_ptr

java - 如何使用可解析的基本引用调用 xpath document()

python - 在给定标签处将 XML 文件拆分为多个

xslt - 将 Xalan 与 Saxon 一起使用

Java - 如何获取数组中给定元素的索引

java - junit:找不到测试类

java - 如何使用 Java 正则表达式提取以下数据?

java - 如何使用一 jar ?