Невозможно разрешить «Ненадежный XML должен быть проанализирован с локальным статическим DTD» в сонаре - PullRequest
1 голос
/ 15 мая 2019

У меня были следующие блоки кода в моем проекте (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.

1 Ответ

0 голосов
/ 15 мая 2019

Это может быть ложно-положительным в анализе сонара, ваш код выглядит точно так, как должен в соответствии с Ненадежный XML должен анализироваться с локальным статическим примером правила DTD .

Когда вы подтверждаете, что eventReader больше не уязвим, вы можете добавить // NOSONAR для подавления ложноположительного результата. Согласно документам Sonar Часто задаваемые вопросы :

Ложно-положительный и не исправится

Вы можете пометить отдельные проблемы как ложно-положительные или не исправят через интерфейс проблем. Если вы используете недолговечный анализ ветвей и PR, предоставленный Developer Edition, проблемы, помеченные как False Positive или Wnot Fix, сохранят этот статус после слияния. Это предпочтительный подход.

// NOSONAR

Большинство анализаторов языка поддерживают использование общего механизма: // NOSONAR в конце строки вопроса. Это подавит все проблемы - сейчас и в будущем - которые могут быть подняты на линии.

...