Как отключить XInclude при разборе XML? - PullRequest
0 голосов
/ 06 ноября 2018

Мне дали понять, что XInclude является потенциальной уязвимостью при получении XML из ненадежных источников. Смотри https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java

XML, который я ожидаю от внешних источников, довольно прост, и нет никаких требований для включения внешнего XML.

Я попробовал следующее, чтобы отключить XInclude (как рекомендуется в Шпаргалке):

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

и использовал этот XML для проверки

<?xml version="1.0" encoding="utf-8"?>
<data xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="file://d/temp/badxml.xml" parse="xml">
    </xi:include>
</data>

Внешний файл содержит недопустимый XML.

Я ожидал, что синтаксический анализатор потерпит неудачу, если для setXIncludeAware установлено значение true, но это не так. Фрагмент всегда разбирается. Я использую Java 8.

Это действительный тест? Это правильный способ избежать атак XInclude?

1 Ответ

0 голосов
/ 06 ноября 2018

Это правильный способ избежать атак XInclude и сущностей, но, как вы обнаружили, это недопустимый тест для атак XInclude.

Согласно этому ответу , «поддержка XInclude опирается на поддержку пространства имен, которая по умолчанию отключена по причинам обратной совместимости». Так что звоните dbf.setNamespaceAware(true);

...