两个相关问题:
1. 浏览器内置了哪些文档深度限制?例如,浏览器X无法解析或不会构建深度>某个限制的文档。 2. 网上是否有可用的文档深度统计数据?是否有一个网站提供Web统计数据,说明Web上一些真实文档的文档深度低于某个值。
文档深度定义为从文档中任何节点到文档根需要的最大父遍历数加1。例如,在...
<html> <!-- 1 -->
<body> <!-- 2 -->
<div> <!-- 3 -->
<table> <!-- 4 -->
<tbody> <!-- 5 -->
<tr> <!-- 6 -->
<td> <!-- 7 -->
Foo <!-- 8 -->
最大深度为8,因为文本节点“Foo”有8个祖先节点。这里的祖先节点是非严格解释的,即每个节点都是自己的祖先和后代。 Opera提供了一些表嵌套统计数据,表明99.99%的文档的表嵌套深度小于22,但该数据不包含整个文档深度。
编辑:
如果人们想批评HTML清理库而不是回答这个问题,请这样做。 http://code.google.com/p/owasp-java-html-sanitizer/wiki/AttackReviewGroundRules解释了如何找到代码、在哪里找到一个让你尝试攻击的测试平台以及如何报告问题。
编辑:
我问了Adam Barth,他非常友好地指出了处理这个问题的webkit代码。
Webkit至少会强制执行这个限制。当创建一个treebuilder时,它会接收一个可配置的树限制:
m_treeBuilder(HTMLTreeBuilder::create(this, document, reportErrors, usePreHTML5ParserQuirks(document), maximumDOMTreeDepth**(document)))
并且它通过了block-nesting-cap测试。