Prevenir el ataque XXE con JAXB

Recientemente, tuvimos una auditoría de seguridad en nuestro código, y uno de los problemas es que nuestra aplicación está sujeta a laXml eXternal Entity (XXE) ataque.

Básicamente, la aplicación es una calculadora que recibe entradas como XML, a través de un servicio web.

Aquí hay un ejemplo de un ataque XXE en nuestra aplicación:

<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>

Como puede ver, podemos referirnos a una entidad que apunta a un archivo externo ("file:///d:/").

Respecto a la entrada XML propiamente dicha<calcinput>...</calcinput> parte) no se ha destacado con JAXB (v2.1). La parte del servicio web se basa en jaxws-rt (2.1).

¿Qué debo hacer para asegurar mi servicio web?

Respuestas a la pregunta(1)

Su respuesta a la pregunta