Внешний объект XML (XXE) - уязвимости внешних параметров и внешних общих объектов - PullRequest
0 голосов
/ 21 января 2019

Чтобы предотвратить атаки XXE, я отключил перечисленные ниже функции в соответствии с рекомендациями для Java DocumentBuilderFactory - https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet.

        dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
        dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        dbf.setXIncludeAware(false);
        dbf.setExpandEntityReferences(false);

Существует ли какая-либо уязвимость, если я не установил внешние-общие-объекты и внешние-параметры-объекты в значение false? Так как это не позволит расширить эти внешние сущности, когда мы установим disallow-doctype-decl в true и XIncludeAware в false.

Безопасно ли удалять эти 2 строки из приведенного выше кода - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); или их также обязательно хранить. Если это обязательно, каковы уязвимости, если мы не установили их в false?

Пожалуйста, предоставьте пример уязвимости, специфичной для external-genereal / Parameter-entity, даже если мы установили disallow-doctype в true, а XIncludeAware в false и ExpandEntityReferences в false.

1 Ответ

0 голосов
/ 01 марта 2019

Хранение их не является обязательным .Установка disallow-doctype-decl предотвратит атаки XXE, потому что любые встроенные объявления DOCTYPE в недоверенном XML приведут к тому, что синтаксический анализатор вызовет исключение.

Однако я рекомендую оставить код как есть, так как external-general-entities иexternal-parameter-entities по умолчанию .Если эти две строки отсутствуют, и более поздний сопровождающий (наивно или по ошибке) удаляет первую строку, код снова становится уязвимым.Наличие других строк явно повышает вероятность того, что при дальнейшей модификации сопровождающий найдет эти функции и, мы надеемся, узнает, почему они там есть.

...