新闻中心
什么是XML Bomb (十亿笑弹攻击),它如何导致拒绝服务?
XML Bomb是一种利用XML内部实体递归定义引发内存指数级膨胀的DoS攻击。它通过几百字节的恶意DTD嵌套声明,使解析器展开为GB级数据,导致OOM、线程阻塞且难被流量防护识别,防御需禁用DTD与外部实体并设解析限制。

XML Bomb,俗称“十亿笑弹攻击”(Billion Laughs Attack),是一种典型的XML拒绝服务(DoS)攻击。它不依赖网络带宽或大量请求,而是靠极小的恶意XML文档,触发解析器指数级展开实体,瞬间耗尽服务器内存,导致服务挂起或崩溃。
核
心原理是利用XML的内部实体递归定义机制。攻击者在DTD中嵌套定义多个实体,让每个实体引用前一个并重复多次,形成几何级增长的数据量。
例如:
Ghostwriter
Replit推出的AI编程助手,一个强大的IDE,编译器和解释器。
238
查看详情
<!DOCTYPE foo [ <!ENTITY a "lol"> <!ENTITY b "&a;&a;&a;&a;&a;"> <!-- 5个"lol" → 5×3 = 15字符 --> <!ENTITY c "&b;&b;&b;&b;&b;"> <!-- 5×15 = 75字符 --> <!ENTITY d "&c;&c;&c;&c;&c;"> <!-- 5×75 = 375字符 --> <!ENTITY e "&d;&d;&d;&d;&d;"> <!-- 5×375 = 1875字符 --> ]> <foo>&e;</foo>
仅几百字节的输入,在解析时可能膨胀为数GB内存占用——嵌套越深、重复因子越大,爆炸效果越强。实际攻击中,4~5层嵌套就足以让多数默认配置的解析器OOM。
为什么会导致拒绝服务
- 内存耗尽:解析器必须将全部展开后的文本载入内存,无法流式处理 - 无明显流量特征:单次请求体积小,绕过传统流量型防护(如WAF、CDN限速) - 阻塞线程:同步解析会卡死整个处理线程,影响并发能力 - 普遍存在于旧系统:许多框架(如J*a SAX/DOM、.NET XmlReader、PHP libxml)默认启用DTD解析典型触发场景
- 接收用户上传的XML配置文件或报表 - SOAP Web Service接口接收未过滤的XML请求体 - 内部微服务间基于XML的数据交换(尤其遗留系统) - 第三方SDK自动解析XML响应(如某些RSS/Atom解析库)关键防御手段
- 禁用DTD解析:设置`setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)`(J*a)、`LIBXML_NO_DTDLOAD`(PHP)等 - 关闭外部实体:显式禁用`http://xml.org/sax/features/external-parameter-entities`和`external-general-entities` - 设置解析限制:如最大实体展开深度、总字符展开上限、嵌套层级阈值 - 替换为更安全的格式:优先使用JSON;若必须用XML,选用不支持DTD的轻量解析器(如Woodstox的`SecureXMLInputFactory`)基本上就这些。不是所有XML解析都危险,但只要开了DTD+外部实体,默认就是敞开门等炸弹进来。
以上就是什么是XML Bomb (十亿笑弹攻击),它如何导致拒绝服务?的详细内容,更多请关注php中文网其它相关文章!
# 是一种
# 小报素材网站建设工作
# 文旅小镇营销推广段子
# 重庆营销推广在线咨询招聘
# 湖北seo电子厂
# 网络营销的网络推广方式
# 网站建设论文致谢英文
# 企业网站哪里做推广
# 优化技术推广网站排名
# 元氏个人网站推广的价格
# 广东酒店网站建设
# 创建一个
# 解决方法
# 文档
# 手把手
# 教你
# php
# 拒绝服务
# 多个
# 递归
# 为什么
# .net
# lol
# 内存占用
# xml解析
# 配置文件
# cdn
# 字节
# apache
# json
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
理解Python模块与全局变量的作用域管理
LINUX怎么设置定时任务_LINUX crontab配置教程
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
iCloud登录入口网页版 苹果iCloud官网登录
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
解决Python单元测试中Mock异常方法调用计数为零的问题
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
c++ 命名空间怎么用 c++ namespace使用指南
谷歌google账号注册详细步骤 谷歌账号注册官方教程
夸克AO3官网入口_AO3镜像网站2025推荐
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
Animex动漫社网入口地址 Animex动漫社网正版在线入口
马斯克:Optimus 人形机器人复数形式为 Optimi
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
AO3官方可用镜像 Archive of Our Own网页版最新入口
AngularJS $http POST请求数据传递与Go后端接收实践
Go语言JSON解析深度指南:动态访问与结构体映射实践
不同用户不同价格! 索尼开启账户个性化定价测试
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
Golang如何使用net/url解析URL_Golang URL解析与处理方法
学习通网页版官方登录 超星学习通电脑端入口指南
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
C++ explicit关键字防止隐式转换_C++构造函数安全规范
豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售
利用5118提升短视频内容效果_5118短视频关键词优化方法
汽车之家官方网站官网入口_汽车之家网页版直接进入
c++如何使用Meson构建系统_c++比CMake更快的构建工具
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
《主播少女的秘密账号迷宫》首支宣传片
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
利用Bokeh CustomJS动态控制DataTable列可见性
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
J*aScript异步迭代器_j*ascript异步遍历
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
内存疯狂猛猛涨价:主板销量直接腰斩!
快手官方唯一登录入口 谨防山寨钓鱼网站
PHP URL参数传递与500错误调试指南


2025-12-16
浏览次数:次
返回列表