Предотвратить нападение XXE с JAXB

Недавно мы провели аудит безопасности нашего кода, и одна из проблем заключается в том, что наше приложениеXml внешняя сущность (XXE) атака.

По сути, приложение представляет собой калькулятор, который получает входные данные в виде XML через веб-сервис.

Вот пример такой атаки XXE на наше приложение:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <foo:calculateStuff>
         <!--Optional:-->
         <xmlInput><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE currency [  
   <!ENTITY include SYSTEM "file:///d:/" >]>
<calcinput>...</calcinput>
]]></xmlInput>
      </foo:calculateStuff>
   </soapenv:Body>
</soapenv:Envelope>

Как видите, мы можем ссылаться на объект, который указывает на внешний файл ("file:///d:/").

Что касается самого ввода XML (<calcinput>...</calcinput> часть) unmarshalled с JAXB (v2.1). Часть веб-сервиса основана на jaxws-rt (2.1).

Что мне нужно сделать, чтобы обезопасить свой веб-сервис?

Ответы на вопрос(1)

Ваш ответ на вопрос