Какова максимальная глубина документов HTML на практике?

Я хочу разрешить встраивание HTML, но избегать DoS из-за глубоко вложенных HTML-документов, которые приводят к сбоям в некоторых браузерах. Я хотел бы иметь возможность разместить 99,9% документов, но отклонить те, которые вкладываются слишком глубоко.

Два тесно связанных вопроса:

Какие пределы глубины документа встроены в браузеры? Например. браузер X не может анализировать или не создает документы с глубиной> некоторого ограничения.Доступна ли статистика глубины для документов в Интернете? Есть ли сайт с веб-статистикой, который объясняет, что некоторый процент реальных документов в Интернете имеет глубину документа меньше некоторой ценности.

Глубина документа определяется как 1 + максимальное количество родительских обходов, необходимое для достижения корня документа из любого узла в документе. Например, в

<html>                   <!-- 1 -->
  <body>                 <!-- 2 -->
    <div>                <!-- 3 -->
      <table>            <!-- 4 -->
        <tbody>          <!-- 5 -->
          <tr>           <!-- 6 -->
            <td>         <!-- 7 -->
              Foo        <!-- 8 -->

максимальная глубина 8, так как текстовый узел "Foo" имеет 8 предков. Предок здесь интерпретируется не строго, то есть когда-либо узел является своим собственным предком и своим потомком.

опера имеет некоторую статистику вложенности таблиц, которая предполагает, что 99,99% документов имеют глубину вложенности таблиц менее 22, но эти данные не содержат всю глубину документа.

РЕДАКТИРОВАТЬ:

Если люди хотят критиковать библиотеку очистки HTML вместо ответа на этот вопрос, пожалуйста, сделайте это.http://code.google.com/p/owasp-java-html-sanitizer/wiki/AttackReviewGroundRules объясняет, как найти код, где найти тестовую площадку, позволяющую испытывать атаки, и как сообщать о проблемах.

РЕДАКТИРОВАТЬ:

Я спросил Адама Барта, и он очень любезно указал мне на код webkit, который обрабатывает это.

Webkit, по крайней мере, обеспечивает соблюдение этого ограничения. Когдаtreebuilder являетсясозданный он получает лимит дерева, который настраивается:

m_treeBuilder(HTMLTreeBuilder::create(this, document, reportErrors, usePreHTML5ParserQuirks(document), maximumDOMTreeDepth**(document)))

и это провереноблок-гнездования колпачок контрольная работа.

Ответы на вопрос(2)

Ваш ответ на вопрос