Предотвратить атаку XXE (обработка внешних объектов) с помощью веб-сервисов JAXB + Spring RESTful

Я знаю, что мы можем предотвратить атаку XXE, установив для свойства IS_SUPPORTING_EXTERNAL_ENTITIES в абстрактном классе XMLInputFactory значение false в JAXB.

Я также видел этот ответ stackru.

Мой вопрос здесь

Как создать экземпляр XMLInputFactory и установить для этого свойства IS_SUPPORTING_EXTERNAL_ENTITIES значение false, когда загружается весеннее приложение. И этот конкретный экземпляр XMLInputFactory должен использоваться только для всех преобразований JAXB для всех классов, которые используют пакет javax.xml.bind.annotation.

1 ответ

Решение

Spring использует RequestMappingHandlerAdapter, который является AbstractHandlerMethodAdapter, который поддерживает HandlerMethods с аргументом метода signature и типами возврата, определенными в @RequestMapping.

Есть 7 семи HttpMessageConverter, и один из них - Jaxb2RootElementHttpMessageConverter

Jaxb2RootElementHttpMessageConverter из пакета Spring-Web.

Начиная с версии 3.2.8 Spring-Web и далее Jaxb2RootElementHttpMessageConverter устанавливает для параметра processExternalEntities значение false, что, в свою очередь, устанавливает для свойства XMLInputFactory IS_SUPPORTING_EXTERNAL_ENTITIES значение false.

См.:

http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-web/3.2.8.RELEASE/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java?av=f

Использовать ответ
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency>

Другие вопросы по тегам