Мне дали понять, что 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?