Zapobiegaj atakowi XXE za pomocą JAXB

Niedawno przeprowadziliśmy audyt bezpieczeństwa naszego kodu, a jednym z problemów jest to, że nasza aplikacja podlegaXml eXternal Entity (XXE) atak.

Zasadniczo aplikacja jest kalkulatorem, który odbiera dane wejściowe jako XML za pośrednictwem usługi sieciowej.

Oto przykład takiego ataku XXE na naszą aplikację:

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

Jak widać, możemy odwołać się do jednostki, która wskazuje na zewnętrzny plik ("file:///d:/").

Odnośnie samego wejścia XML (<calcinput>...</calcinput> część) nie jest zaimplementowana za pomocą JAXB (v2.1). Część usługi internetowej opiera się na jaxws-rt (2.1).

Co muszę zrobić, aby zabezpieczyć moją usługę internetową?

questionAnswers(1)

yourAnswerToTheQuestion