0

0

XML注入攻击与防御 什么是XML Bomb及其防范措施

幻夢星雲

幻夢星雲

发布时间:2026-02-24 11:25:03

|

829人浏览过

|

来源于php中文网

原创

xml bomb是一种利用xml解析器过度忠实展开dtd实体导致内存耗尽的攻击。其根源在于解析器默认启用dtd和外部实体,需显式禁用相关功能来防御。

xml注入攻击与防御 什么是xml bomb及其防范措施

XML Bomb 是什么?它不是“被黑了”,是解析器老实过头了

XML Bomb(十亿笑弹攻击)不是黑客发了巨量请求,而是用几百字节的恶意 XML,骗解析器自己把内存撑爆。根源在于:只要 DTD 被允许、实体展开没限制,解析器就会忠实地递归展开 &a;&b;&c;……直到 OOM。这不是代码逻辑漏洞,是配置失守——就像给门装了锁,却把钥匙焊死在门把手上。

Java 中用 SAX/DOM 解析 XML 时,默认就是炸弹引信

Java 的 DocumentBuilderSAXParser 在 JDK 8 及更早版本中,默认启用 DTD 和外部实体。哪怕你只调用 parse(InputStream),没碰任何安全开关,就已经暴露。

  • 必须显式禁用 DTD:setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
  • 必须关闭外部实体:setFeature("http://xml.org/sax/features/external-general-entities", false)setFeature("http://xml.org/sax/features/external-parameter-entities", false)
  • 别信“我只解析内部数据”——只要接口接收用户输入(如上传 XML 配置、SOAP 请求体),就属于不可信源

.NET 中 XmlReaderSettings 不设 DtdProcessing.Prohibit 就等于开门

在 .NET Framework 或 .NET Core 中,XmlReader.Create() 若直接传入原始字符串或流,且未配 XmlReaderSettings,默认会处理 DTD——哪怕你用的是 MSXML 6.0 或 System.Xml v4.8+。

Hotpot.ai
Hotpot.ai

AI工具箱(图像、游戏和写作系列工具)

下载
  • 关键一步:settings.DtdProcessing = DtdProcessing.Prohibit(不是 IgnoreIgnore 仍可能触发部分解析)
  • 同时设 settings.XmlResolver = null,堵死外部实体加载路径
  • 若需兼容旧系统又不能改解析逻辑,至少加 settings.MaxCharactersFromEntities = 10240(单位:字符),防浅层爆炸

Python 的 xml.etree.ElementTree 也危险,别被“标准库”误导

xml.etree.ElementTree.parse() 在 Python 3.9 之前默认允许 DTD;3.10+ 虽默认禁用外部实体,但 DTD 声明本身仍被读取(可能触发警告或异常,但不阻止解析)。更麻烦的是,很多项目混用 lxml(基于 libxml2),而它默认开启全部 DTD 功能。

  • 安全写法:parser = XMLParser(resolve_entities=False) + parse(file, parser)
  • lxml 时必须:parser = etree.XMLParser(resolve_entities=False, no_network=True, dtd_validation=False)
  • 永远不要对用户输入调用 etree.fromstring(xml_str) —— 它不校验、不设限、不警告

最常被忽略的一点:防御不是靠“识别恶意 XML”,而是让解析器从第一行就拒绝执行 DTD。所有“先解析再校验”的方案,都已在内存爆炸的途中。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

866

2024.03.01

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1932

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2109

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1134

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1558

2023.10.24

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1228

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号