更新: XML 外部实体防护攻略的 Java 部分
XXE Prevent Cheat Sheet一直是Java开发者的支柱,它的Java部分仍然是人们需要硬化解析器时登陆的页面. 但是,它已经过时了:建议是围绕着Java 6和7提出的,尽管自那以后有打字修正和小的添加,但结构和例子并没有被重新审视. 它所记录的一些执行情况已不复存在;今天却根本没有提到其他情况。
我是Apache Communitys Security XML的作者之一,这个Apache Communitys组件的唯一目的就是提供安全默认的JAXP工厂. 写作意味着在细节上通过每个执行的差异来工作,这就发现了一些本页面过时或有误导作用的地方. 我想把这个带回骗局
我首先开始讨论这个问题,因为Contracting.md要求一份大量更新的作弊单。
∮为什么现在∮
XXE读作一个解决了的问题. 事实并非如此。 Apache Tika在2025年被击中了两次——CVE-2025-54988,然后CVE-2025-66516在CVSS 10.0,AI协助的报告从此浮出一股稳定流的XXE对Java项目的调查结果,有些是真实的,很多只是指控.
这改变了维护者的经济学。 个别地论证说,某个特定分析员只看到过可信的投入,这是缓慢的,对提交报告的人来说很少令人信服。 在不需要的地方使外部实体丧失能力,费用就更低了。 这就是为什么我们在5月开始Apache Commons Secure XML.
作弊单在选择的两边都有其作用,今天它的作用也不好:
- 喜欢硬化的读者自己需要知道每个设置的限制——哪些执行实际上尊重它,它没有涵盖什么,以及它是否响亮或沉默地失败。
- 不愿拥有“10行代码”的读者应知道存在一个维护的图书馆,并能够代表他们吸收这些报告。 我们准备好了
□缺少什么或需要更新什么?
- 实例失败
两个大片段都抓取了"ParserConfigulation Exception",日志为"该特性可能没有你的XML处理器的支持",并用一个没有被硬化的工厂继续解析. 这一例外恰恰是配方**不适用的情况。 这是这页上一个最严重的问题,因为它教错了反射。
- 未提及`新过失()'
JAXP工厂是可插件的,因此,新Instance ()'的返回取决于阶级路径,而不是你的代码——页面建议的每一个功能都是可选的。 新缺陷Instance ()' (Java 9) 允许应用程序选择退出检索,并知道它正在配置哪个执行。 页面上从来没有提到它。
- 无正当理由建议设置
`扩展实体参考'是最清楚的案例:它支配实体在DOM树中* 代表* 的方式,而不是 . . . . . . .
内容来源: OWASP/CheatSheetSeries