全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python如何安全地解析不可信的XML DefusedXML

必须使用defusedxml替代标准库xml模块,因其默认禁用外部实体、限制嵌套深度(100层)、字符数(10MB)等,防止XXE、billion laughs等攻击;标准库默认启用外部实体且无资源限制,易导致RCE或DoS。

Python解析不可信XML时,必须防止XXE(XML外部实体)攻击、 billion laughs 攻击、以及递归实体展开等安全风险。DefusedXML 是专为解决这些问题设计的库,它通过禁用危险特性、设置严格解析限制,来替代 Python 标准库中不安全的 xml 模块。

为什么不能直接用标准库的 xml.etree.ElementTree?

Python 原生的 xml.etree.ElementTreexml.dom.minidomxml.sax 默认启用外部实体解析,且不限制嵌套深度或实体展开数量。攻击者可构造恶意 XML,导致拒绝服务(内存耗尽、CPU 占满)甚至读取本地文件(如 file:///etc/passwd)。

用 defusedxml 替换标准解析器(推荐做法)

安装后,用对应模块直接替换原生导入,无需修改业务逻辑:

# 安装
pip install defusedxml

# 替换示例(ElementTree 场景)
# ❌ 不安全
from xml.etree.ElementTree import fromstring

# ✅ 安全替换
from defusedxml.ElementTree import fromstring

defusedxml 提供了与标准库完全兼容的封装模块:

  • defusedxml.ElementTree → 替代 xml.etree.ElementTree
  • defusedxml.minidom → 替代 xml.dom.minidom
  • defusedxml.pulldom → 替代 xml.dom.pulldom
  • defusedxml.sax → 替代 xml.sax
  • defusedxml.expat → 替代 xml.parsers.expat

关键防护机制与默认限制

defusedxml 在底层禁用了高危功能,并设定了保守的资源上限:

  • 默认禁用外部实体(resolve_entities=False),杜绝 XXE
  • 限制 XML 嵌套深度(默认 100 层),防止栈溢出
  • 限制总字符数(默认 10MB)、属性数量、命名空间数量等
  • 禁用 DTD 解析(除非显式启用且受控)
  • 对重复实体展开做计数限制,防御 billion laughs 类型攻击

进阶:自定义限制与显式控制

若需微调策略(例如允许极小范围的内部实体),可通过参数传入限制配置:

# 示例:放宽单次解析最大字符数到 50MB,但依然禁用外部实体
from defusedxml.ElementTree import parse
parser = defusedxml.ElementTree.XMLParser(
  resolve_entities=False,
  forbid_dtd=False, # 仅当真需要 DTD 时才设 True
  forbid_entities=True, # 推荐保持 True
  max_entity_expansions=1000,
  max_xml_size=50_000_000
)
tree = parse("untrusted.xml", parser)

注意:除非明确了解风险,否则不要启用 resolve_entitiesforbid_dtd=False;绝大多数 Web API 场景应保持默认最严策略。


# python  #   # 标准库  # 为什么 


相关文章: TestNG的testng.xml配置文件怎么写  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  ui设计制作网站有哪些,手机UI设计网址吗?  如何快速搭建二级域名独立网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  建站之星伪静态规则如何正确配置?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何通过虚拟主机快速完成网站搭建?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何在腾讯云服务器快速搭建个人网站?  教学论文网站制作软件有哪些,写论文用什么软件 ?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  建站168自助建站系统:快速模板定制与SEO优化指南  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何选购建站域名与空间?自助平台全解析  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  股票网站制作软件,网上股票怎么开户?  建站主机是否等同于虚拟主机?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何正确下载安装西数主机建站助手?  建站之星代理如何获取技术支持?  模具网站制作流程,如何找模具客户?  已有域名和空间如何搭建网站?  如何选择建站程序?包含哪些必备功能与类型?  ,想在网上投简历,哪几个网站比较好?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何挑选最适合建站的高性能VPS主机?  招商网站制作流程,网站招商广告语?  建站之星安装后界面空白如何解决?  制作网站外包平台,自动化接单网站有哪些?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  网站企业制作流程,用什么语言做企业网站比较好?  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在云主机上快速搭建网站?  如何在万网ECS上快速搭建专属网站?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何配置FTP站点权限与安全设置?  如何用PHP快速搭建CMS系统?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  c# 在高并发场景下,委托和接口调用的性能对比  建站之星后台管理:高效配置与模板优化提升用户体验  北京网站制作的公司有哪些,北京白云观官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。