V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nutting
V2EX  ›  程序员

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

  •  
  •   nutting · 2021-01-29 11:14:50 +08:00 · 1282 次点击
    这是一个创建于 1403 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 系统)崩溃。
    1 条回复    2021-01-29 12:36:28 +08:00
    mmdsun
        1
    mmdsun  
       2021-01-29 12:36:28 +08:00 via Android   ❤️ 1
    禁用外部实体就行,以 SAXReader 为例子
    其他解析器类似处理

    var reader = new SAXReader();
    reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3424 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 11:50 · PVG 19:50 · LAX 03:50 · JFK 06:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.