XML 外部实体注入漏洞怎么解决

2021-01-29 11:14:50 +08:00
 nutting
3.1.1. XML 外部实体注入(1)
缺陷描述:使用配置的 XML 解析器无法预防和限制外部实体进行解析,这会
使解析器暴露在 XML External Entities 攻击之下
缺陷的原理、风险及预防:XML External Entities 攻击可利用能够在处理时
动态构建文档的 XML 功能。XML 实体可动态包含来自给定资源的数据。外
部实体允许 XML 文档包含来自外部 URI 的数据。除非另行配置,否则外部
实体会迫使 XML 解析器访问由 URI 指定的资源,例如位于本地计算机或远
程系统上的某个文件。这一行为会将应用程序暴露给 XML External Entity
(XXE) 攻击,从而用于拒绝本地系统的服务,获取对本地计算机上文件未经
授权的访问权限,扫描远程计算机,并拒绝远程系统的服务。
缺陷示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;
</foo>
如果 XML 解析器尝试使用 /dev/random 文件中的内容来替代实体,则此示

例会使服务器(使用 UNIX 系统)崩溃。
1273 次点击
所在节点    程序员
1 条回复
mmdsun
2021-01-29 12:36:28 +08:00
禁用外部实体就行,以 SAXReader 为例子
其他解析器类似处理

var reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749477

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX