Исправление исправления для инъекции внешнего объекта XML

Когда я сканировал с использованием инструмента fortify, у меня возникали некоторые проблемы в разделе "Внедрение внешнего объекта XML".

TransformerFactory trfactory = TransformerFactory.newInstance(); 

Это место, где он показывает ошибку. Я дал следующее исправление, как предложено fortify

trfactory.setFeature("http://xml.org/sax/features/external-general-entities", false); 
trfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); 

но все же проблемы не устранены. Как исправить эту проблему?

4 ответа

TransformerFactory trfactory = TransformerFactory.newInstance();
trfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

Этого было бы достаточно.

Иногда это не будет работать, если Java-версия не совместима.

if (javaVersion > 1.6) {
        dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
        dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
      }
else {
        if (javaVersion > 1.5) {
          dbf.setFeature("http://xerces.apache.org/xerces2-j/features.html#external-general-entities", false);
          dbf.setFeature("http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities", false);
        }
else {
          dbf.setFeature("http://xerces.apache.org/xerces-j/features.html#external-general-entities", false);
          dbf.setFeature("http://xerces.apache.org/xerces-j/features.html#external-parameter-entities", false);
        }
 }

У меня это сработало:-)

Я попытался с классом реализации "Xalan" вместо TransformerFactory.newInstance(). Это сработало для меня, и проблема с фортификацией была исправлена

        TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
        Transformer transformer = transformerFactoryImpl.newTransformer();

Вы также можете попробовать:

    TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
    Transformer transformer = transformerFactoryImpl.newTransformer();
    transformer.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

Добавьте эту строку. У меня это сработало.

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Другие вопросы по тегам