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

XML Bomb,俗称“十亿笑弹攻击”(Billion Laughs Attack),是一种典型的XML拒绝服务(DoS)攻击。它不依赖网络带宽或大量请求,而是靠极小的恶意XML文档,触发解析器指数级展开实体,瞬间耗尽服务器内存,导致服务挂起或崩溃。
核心原理是利用XML的内部实体递归定义机制。攻击者在DTD中嵌套定义多个实体,让每个实体引用前一个并重复多次,形成几何级增长的数据量。
例如:
<!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。
基本上就这些。不是所有XML解析都危险,但只要开了DTD+外部实体,默认就是敞开门等炸弹进来。
以上就是什么是XML Bomb (十亿笑弹攻击),它如何导致拒绝服务?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号