在我的文章中,我谈到了在目前流行的开源项目中发现的XXE漏洞,以及如何更全面地评估该类问题。今天我将讨论禁用XXE处理的几种策略。
外部实体(XXE)和内部实体对于构建简洁的XML文档非常重要。防止出现XXE漏洞的适当办法取决于您的项目需要。它可以像完全禁用外部实体一样简单,也可以只对您需要的实体和信任的实体进行稍微复杂一点的处理就可以有效解决。
与任何其他被研究的语言相比,Java语言,尤其是JAXPAPI,为我们提供了更多的选项,所以我们的代码示例和解决方案将主要使用Java语言来进行,但我们也展示了其他语言与Java语言具有同等效果的解决方案。
禁用DOCTYPE
如上文所述,实体是在XML文档的DOCTYPE中声明的,因此当项目中不需要DOCTYPE声明时,简单而安全的解决方案是完全禁用该类实体。
当设置为true时,disallowdoctypedecl功能指示XML处理器在遇到doctype声明时引发异常:
factory.setFeature("