当前位置: 首页 > 知识库问答 >
问题:

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

高兴贤
2023-03-14

在jdk1.6中,当我设置时

transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)

我面临以下错误:

javax。xml。使改变TransformerConfiguration异常:无法设置功能'http://javax.xml.XMLConstants/property/accessExternalDTD'在此TransformerFactory上。位于组织。阿帕奇。泽兰。加工机TransformerFactoryImpl。setFeature(TransformerFactoryImpl.java:418)

正如我在这里所发现的:如何预防xalan。具有META-INF\services\javax的jar。xml。使改变TransformerFactory是否将接管JDK 1.6内置的Xalan实现?我无法进行此处建议的更改,因为我的管理员会审查其他API冲突。

根据此链接:http://xml.apache.org/xalan-j/features.html#domsource您可以使用TransformerFactory。setFeature(String,boolean)方法设置特征值。XalanJava只支持设置XMLConstants。FEATURE\u SECURE\u处理功能。对于所有其他功能,TransformerFactory公开其值,但不能更改其状态。

因此,似乎只有使用TransormerFactory的xalan实现,我们才能设置此功能。

transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

最后,我的问题是:如果我们设置了功能:

transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

然后是另一个功能(XMLContain.ACCESS_EXTERNAL_DTD)自动设置为false。
我从我设置的日志中得到上述功能为“false”。但我想确定access ExternalDTD功能是否默认设置为false,或者安全处理功能是否设置为true。

共有2个答案

史涵育
2023-03-14

从源代码看,其他功能在XMLConstants时不会更新。FEATURE\u SECURE\u 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}));
}
}

看来我需要找到另一种方法来设置这个feaure常量。ACCESS\u EXTERNAL\u DTD:(

冷英光
2023-03-14

在Java8是的。如果我们设置

TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

然后属性ACCESS_EXTERNAL_DTDACCESS_EXTERNAL_STYLESHEET设置为",就像owasp指南建议的那样。

我们可以通过以下方式进行验证:

Object hasExternalDtd=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_DTD);
Object hasExternalStyle=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);

设置FEATURE\u SECURE\u PROCESSING功能后。

如果不为这两个属性设置默认值,则默认值为“全部”。

 类似资料:
  • 我们计划使用CXF为Java客户机代码生成Java类。我已经读到CXF是线程安全的,请参阅CXF常见问题解答。 但我找不到的是,对同一soap服务的两个线程中的两个调用是同时执行的,还是一个线程将阻塞另一个线程? 所以我们有多个线程调用相同的皂服务实例,比如 我需要知道是否只有一个肥皂呼叫在同一时间执行,即一个呼叫阻止所有其他呼叫,直到它完成;或者是否所有呼叫都在同一时间通过。

  • 问题内容: 从其他线程(而不是EDT)调用JFrame的dispose()方法是否安全? 问题答案: 否。它可能会起作用,也可能会引起问题。只需将方法包装在SwingUtilities.invokeLater(…)中,不必担心。

  • 我想知道是否有人知道一种很好的方法,可以使用Capybara/Browserstack/Cucumber按顺序启动各个浏览器堆栈测试。 我在使用Capybara时遇到了一些问题,因为browserstack不会在每次运行时都使用我的新功能进行更新,即使我关闭了浏览器,也不会更新,即:两次测试在browserstack中顺序启动,但使用相同的浏览器和操作系统设置。 摘要场景:运行登录测试假设我想测试

  • 这就是我生成dutylist的方法。 这将更改对的第二个值 但是它会更改pos中的其他值,也就是说,如果我更改了StaffListUpdated[0].third[0]=pair,它也会更改StaffListUpdated[1].third[0]=pair。我试过很多种方法,但都无济于事。

  • 问题内容: 这个问题全都与懒惰有关…我想做这样的事情: 这样我就不必这样做: 有什么办法可以使第一个查询工作?这是我运行它时遇到的错误: 问题答案: 您的意思是在MySQL中您的第一个查询: 产生此错误?: 错误代码:1064。您的SQL语法有错误;请参见语法。检查与您的MySQL服务器版本相对应的手册,以在第1行的’*’附近使用正确的语法 您可以将代码更改为(这不会导致任何错误!): 或到此,如

  • 问题内容: 当我选择第一个SelectOnMenu的任何项目时,我想更新第二个SelectOneMenu。现在,我从ManagedBean获取SelectOneMenus的值。我想我必须使用AJAX(jquery)将参数发送到ManagedBean。 问题答案: 实际上,您可以使用ValueChangeListener,当selectOneMenu的值更改时将调用它: 然后,在您的bean中,您可