使用XStream防止XXE攻击

时间:2016-10-12 14:15:39

标签: java security xstream xxe

想知道我们如何使用Xstream API修复Xml外部实体(XXE)漏洞。

就像我们可以做的那样

// 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;
}

1 个答案:

答案 0 :(得分:1)

根据XStream FAQs

  

StaxDriver尝试关闭对标准StaX解析器的外部实体的支持。但是,最终使用的StAX实现是在外部定义的(请参阅JDK文档),并且应该在目标平台上进行测试,以确保解析器尊重设置。

这是说StaxDriver试图告诉StAX实现做正确的事情,但您正在使用的StAX实现可能会忽略这一点。如果它确实忽略它,简单的答案是使用常见问题解答中列出的没有问题的替代驱动程序之一。