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

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

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

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

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

                   
                   
    
Foo

максимальная глубина равна 8, поскольку текстовый узел «Foo» имеет 8 предков. Здесь предок интерпретируется не строго, т.е. каждый узел является своим собственным предком и своим собственным потомком.

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

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

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

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

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

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

 m_treeBuilder (HTMLTreeBuilder :: create (this, document, reportErrors, usePreHTML5ParserQuirks (document), maximumDOMTreeDepth ** (документ))) 
 

, и это проверено тестом block-nesting-cap .

22
задан Mike Samuel 18 October 2011 в 22:21
поделиться