Я хочу разрешить встраивание HTML, но избежать DoS из-за глубоко вложенных документов HTML, которые вызывают сбой некоторых браузеров. Я хотел бы иметь возможность разместить 99,9% документов, но отклонять те, которые слишком глубоко вложены.
Два тесно связанных вопроса:
Глубина документа определяется как 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
поделиться
0 ответов
Другие вопросы по тегам: Похожие вопросы: