为什么xml.etree.ElementTree被认为不安全?

4
根据 使用Python创建简单XML文件,在Python中生成XML文件的最简单方法之一是使用Python内置的ElementTree XML API。
然而,Python 3文档包含以下警告:

警告: {{link3:xml.etree.ElementTree}} 模块不安全,容易受到恶意构造的数据攻击。如果需要解析不受信任或未经身份验证的数据,请参阅 XML漏洞

我原计划使用ElementTree库来构建具有用户输入属性值的XML请求。然而,我现在担心我的应用程序的安全性。
例如,我的应用程序有一个logon()函数,其中包括用户输入的用户名和密码作为参数。然后将这些值用作XML属性。
import xml.etree.ElementTree as ET

def logon(username, password):
    # Create XML logon request for external webservice
    root = ET.Element("xml")
    body = ET.SubElement(root, "Logon")
    body.set("Username", username)
    body.set("Password", password)

    return ET.tostring(root, encoding="UTF-8", method="xml")

为什么xml.etree.ElementTree被认为是不安全的?在使用用户定义的XML属性值时是否安全?

2
很确定这是关于解析时的DoS攻击。由于您没有解析XML,所以应该没问题。 - Ry-
2
你读过“XML漏洞”链接吗? - user2357112
1个回答

5
根据Python文档的20.4.1. XML漏洞部分,xml.etree.ElementTree容易受到十亿笑攻击二次扩张攻击的影响。

十亿笑攻击/指数实体扩展

十亿笑攻击(也称为指数实体扩展)使用多层嵌套实体。每个实体都引用另一个实体多次,并且最终实体定义包含一个小字符串。指数扩展导致几千兆字节的文本并消耗大量内存和CPU时间。

二次扩张实体

二次扩张攻击类似于十亿笑攻击; 它也滥用实体扩展。它不是嵌套实体而是重复一个具有几千个字符的大型实体。该攻击不像指数情况那样高效,但它避免触发禁止深度嵌套实体的解析器对策。

只要您不恶意解析精心制作的XML,您就是安全的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接