当前位置: 首页 > 知识库问答 >
问题:

使用XStream防止XXE攻击

阮阳曦
2023-03-14

想知道如何使用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_(XXE)\u预防\u备忘单

我的代码是这样的-

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个答案

龙佐
2023-03-14

根据XStream常见问题解答:

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

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

 类似资料:
  • 问题内容: 最近,我们对代码进行了安全审核,问题之一是我们的应用程序受到 Xml eXternal Entity (XXE)攻击。 基本上,该应用程序是一个计算器,可通过Web服务以XML形式接收输入。 这是对我们的应用程序进行此类XXE攻击的示例: 如您所见,我们可以引用指向外部文件()的实体。 关于XML输入本身(该部分)未与JAXB(v2.1)一起编组。Web服务部分基于jaxws- rt(

  • 我们对代码进行了安全审计,它提到我们的代码容易受到XML外部实体(XXE)攻击。 XML外部实体攻击利用XML功能在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,这些攻击可用于执

  • 我需要修复XXE问题。我在代码中使用transformerfactory。在下面找到修复程序,但我在代码中看不到ACCESS\u EXTERNAL\u DTD属性。我得到的原因是以下代码将适用于Java7,但我使用的是Java 6。能否有人建议其他修复方法来保护Java TransformerFactory免受XXE攻击,请执行以下操作:

  • 本文向大家介绍如何防止XSS攻击?相关面试题,主要包含被问及如何防止XSS攻击?时的应答技巧和注意事项,需要的朋友参考一下 (1) 将前端输出数据都进行转义 (2) 将输出的字符串中的\反斜杠进行转义 (3) 从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出 (4) 使用cookie的HttpOnly属性,保护好cookie 详细参见:http://blog.csdn.net/fe

  • 本文向大家介绍Drupal 9:防止枚举攻击,包括了Drupal 9:防止枚举攻击的使用技巧和注意事项,需要的朋友参考一下 Wired最近发表的一篇有关Parler数据黑客的文章谈到了黑客组织如何能够使用不安全的直接对象引用(IDOR)或枚举攻击从Parler网站窃取公开可用的信息。此类攻击涉及黑客查看站点的结构,并尝试通过查看URL来猜测下一个可用资源。显然,通过简单地枚举其公开可用帖子的ID即

  • 问题内容: 在将输入数据放入MySQL数据库之前,我可以在Perl中使用该功能来清理输入吗?我不太了解正则表达式,所以在我做自己的功能之前,我想知道是否已经有一个正则表达式。 问题答案: 清理要插入数据库的数据的正确方法是对所有要插入SQL字符串的变量使用占位符。换句话说,永远不要这样做: 而是使用占位符: 然后在执行查询时传递要替换的变量: 您可以将这些操作与某些DBI便捷方法结合使用。上面也可