Чтобы использовать парсер безопасно, вы должны явно отключить XXE в парсере, который вы используете. Ниже описано, как отключить XXE в наиболее часто используемых синтаксических анализаторах XML для Java.
JAXP DocumentBuilderFactory и SAXParserFactory
Оба DocumentBuilderFactory и SAXParserFactory Парсеры XML можно настроить с помощью тех же методов, чтобы защитить их от XXE. Здесь представлен только пример DocumentBuilderFactory.
- Метод JAXP DocumentBuilderFactory setFeature позволяет разработчику контролировать, какие специфичные для реализации функции процессора XML являются включить или отключить
.
- Каждая реализация процессора XML имеет свои собственные функции, которые определяют, как обрабатываются DTD и внешние сущности.
Для синтаксиса выделенного фрагмента кода для DocumentBuilderFactory нажмите here.
Для синтаксиса выделенного фрагмента кода для SAXParserFactory нажмите here.
Ссылки предоставят вам полную информацию о том, как использовать DTD для обоих парсеров.
Xerces 1 Особенности:
Не включайте внешние объекты, установив эту функцию в ложь. Не включайте объекты параметров, установив для этой функции значение false.
Xerces 2 Особенности:
DISALLOW инлайн DTD, установив эту функцию, чтобы верно. Не включайте внешние объекты, установив для этой функции значение false. Не включайте объекты параметров, установив для этой функции значение false. StAX и XMLInputFactory Анализаторы StAX, такие как XMLInputFactory, позволяют устанавливать различные свойства и функции.
Для защиты Java XMLInputFactory от XXE, сделайте следующее:
xmlInputFactory.setProperty (XMLInputFactory.SUPPORT_DTD, ложь); // Это полностью отключает DTD для этого завода
Не могли бы вы принять ответ, если он вам помог? Спасибо. –