Предотвращение атаки XXE с помощью XStream

Хотел узнать, как мы можем исправить уязвимость Xml EXternal Entity (XXE) с помощью Xstream API.

Как мы можем сделать

// This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented
// Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String FEATURE = null;
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);

с DocumentBuilderFactory. Подробнее — https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Prevention_Cheat_Sheet

Мой код что-то вроде -

public static Class<?>[] myAnnotatedClasses = { Test1.class, Test2.class };

public static Object parseStr(String str) throws XStreamException
{
    XStream xstream = new XStream(new StaxDriver());
    xstream.processAnnotations(myAnnotatedClasses);
    Object obj =xstream.fromXML(str);
    return obj;
}

person Aniket Thakur    schedule 12.10.2016    source источник


Ответы (1)


Согласно Часто задаваемым вопросам по XStream:

StaxDriver пытается отключить поддержку внешних сущностей для стандартного парсера StaX. Однако окончательно используемая реализация StAX определяется извне (см. документацию JDK), и необходимо провести тест на целевой платформе, чтобы убедиться, что синтаксический анализатор соблюдает настройку.

Это говорит о том, что StaxDriver пытается сообщить реализации StAX, чтобы она делала правильные вещи, но используемая вами реализация StAX может игнорировать это. Если он игнорирует это, простой ответ — использовать один из альтернативных драйверов, перечисленных в FAQ, у которого нет проблемы.

person Stephen C    schedule 12.10.2016
comment
Имеет смысл. Буду пробовать с другими драйверами. В отчетах говорится, что StaxDriver уязвим для меня. - person Aniket Thakur; 21.10.2016