在jdk1.6中,当我设置
transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)
Run Code Online (Sandbox Code Playgroud)
我遇到以下错误:
javax.xml.transform.TransformerConfigurationException:无法在此TransformerFactory上设置功能' http://javax.xml.XMLConstants/property/accessExternalDTD '。在org.apache.xalan.processor.TransformerFactoryImpl.setFeature(TransformerFactoryImpl.java:418)
就像我在这里找到的一样:如何防止具有META-INF \ services \ javax.xml.transform.TransformerFactory的xalan.jar接管Xalan实现中内置的JDK 1.6? 我无法进行此处建议的更改,因为管理员还会查看其他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);
Run Code Online (Sandbox Code Playgroud)
最后我的问题:如果我们设置功能:
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Run Code Online (Sandbox Code Playgroud)
然后是另一个功能(XMLConstants.ACCESS_EXTERNAL_DTD)自动设置为false。
我从设置的日志中获得了上述功能“ false”。但是我想确定是否accessExternalDTD默认将功能设置为false或将安全处理功能设置为true。
在 Java 8 中是的。如果我们设置
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Run Code Online (Sandbox Code Playgroud)
然后将属性ACCESS_EXTERNAL_DTD设置ACCESS_EXTERNAL_STYLESHEET为owasp 指南""推荐的那样。
我们可以通过以下方式验证:
Object hasExternalDtd=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_DTD);
Object hasExternalStyle=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);
Run Code Online (Sandbox Code Playgroud)
设置该功能后FEATURE_SECURE_PROCESSING。
如果我们不设置默认值,则这all两个属性都适用。
从源代码来看,更新XMLConstants.FEATURE_SECURE_PROCESSING时,其他功能似乎没有更新:
public void setFeature(String name, boolean value)
throws TransformerConfigurationException {
// feature name cannot be null
if (name == null) {
throw new NullPointerException(
XSLMessages.createMessage(
XSLTErrorResources.ER_SET_FEATURE_NULL_NAME, null));
}
// secure processing?
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
m_isSecureProcessing = value;
}
// This implementation does not support the setting of a feature other than
// the secure processing feature.
else
{
throw new TransformerConfigurationException(
XSLMessages.createMessage(
XSLTErrorResources.ER_UNSUPPORTED_FEATURE,
new Object[] {name}));
}
}
Run Code Online (Sandbox Code Playgroud)
所以看来我需要找到另一种方法来设置此功能XMLConstants.ACCESS_EXTERNAL_DTD :(
| 归档时间: |
|
| 查看次数: |
5507 次 |
| 最近记录: |