Ste*_*ica 4 python xml security elementtree
根据使用 python 创建简单的 XML 文件,在 Python 中生成 XML 文件的最简单方法之一是使用 Python 的内置 ElementTree XML API。
但是,Python 3 文档包含以下警告:
警告:该
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")
Run Code Online (Sandbox Code Playgroud)
为什么被xml.etree.ElementTree认为是不安全的?使用用户定义的 XML 属性值是否安全?
根据第20.4.1 节。Python 文档的XML 漏洞xml.etree.ElementTree容易受到Billion Laughs 攻击和二次爆炸攻击。
\n\n\n十亿笑声/指数实体扩张
\nBillion Laughs 攻击 \xe2\x80\x93 也称为指数实体扩展 \xe2\x80\x93 使用多层嵌套实体。每个实体多次引用另一个实体,最终的实体定义包含一个小字符串。指数扩展会产生数 GB 的文本,并消耗大量内存和 CPU 时间。
\n二次爆炸实体展开
\n二次爆炸攻击类似于十亿笑攻击;它也滥用实体扩展。它不是嵌套实体,而是一遍又一遍地重复一个具有几千个字符的大型实体。该攻击的效率不如指数情况那么高,但它避免了触发禁止深层嵌套实体的解析器对策。
\n
只要您不解析恶意制作的 XML,您就是安全的。
\n| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |