Предотвратить нападение 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).
Что мне нужно сделать, чтобы обезопасить свой веб-сервис?