【问题标题】:Does setting FEATURE_SECURE_PROCESSING in transformerFactory update other security features as well?在transformerFactory 中设置 FEATURE_SECURE_PROCESSING 是否也会更新其他安全功能?
【发布时间】:2015-07-07 13:51:03
【问题描述】:

在jdk1.6中,我正在设置

transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)

我面临以下错误:

javax.xml.transform.TransformerConfigurationException:无法在此 TransformerFactory 上设置功能“http://javax.xml.XMLConstants/property/accessExternalDTD”。 在 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 xerces xalan


    【解决方案1】:

    在 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

    【讨论】:

      【解决方案2】:

      从源代码看来,当 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}));
      }
      }
      

      所以看来我需要找到另一种方法来设置此功能 XMLConstants.ACCESS_EXTERNAL_DTD :(

      【讨论】:

      • 你找到其他方法了吗?
      猜你喜欢
      • 2015-01-23
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2015-08-22
      • 2013-10-14
      相关资源
      最近更新 更多