У меня были следующие блоки кода в моем проекте (Java с Lombok):
val factory = (XMLInputFactory2) XMLInputFactory.newInstance();
val streamReader = (XMLStreamReader2) factory.createXMLStreamReader(inputStream);
и
val factory = XMLInputFactory.newInstance();
val eventReader = factory.createXMLEventReader(new CharArrayReader(marshaledObject.toCharArray()));
Я проанализировал свой код с помощью Sonarqube (настроен с использованием этого образа Docker: owasp / sonarqube ).
Оба блока кода были помечены как уязвимости, нарушающие правило Untrusted XML should be parsed with a local, static DTD
.
Я изменил свой код на:
val factory = (XMLInputFactory2) XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
val streamReader = (XMLStreamReader2) factory.createXMLStreamReader(inputStream);
и
val factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
val eventReader = factory.createXMLEventReader(new CharArrayReader(marshaledObject.toCharArray()));
соответственно и реран анализ. Оба кодовых блока все еще помечены как нарушающие вышеупомянутое правило. Я не понимаю почему. Должны ли я установить некоторые дополнительные свойства на фабриках?
Мой проект построен с использованием Gradle 5.3.1 и проанализирован с использованием плагина org.sonarqube
версия 2.6.