为什么一个自引用的iframe不是无限循环的,会导致我的机器崩溃?

我创build了一个简单的HTML页面,该页面的iframesrc属性引用了包含页面 – 换句话说,是一个自引用的iframe。

this.html

 <html> <head></head> <body> <iframe src="this.html" /> </body> </html> 

为什么这不是无限循环和崩溃我的浏览器? 另外,为什么甚至不会在这个崩溃?

(注:这是由团队讨论使用iframe来解决问题的优点和缺点而产生的,你知道,“镜子的镜子”就是这样)。

W3C在1997年解释了如何在“ 实现HTML框架 ”中实现框架 :

任何试图将其祖先使用的URL分配给其SRC的框架都被视为根本没有SRC URL(基本上是空白框架)。


Iframerecursion错误/攻击历史

正如kingdago在上面的评论中发现并提到的那样,一个浏览器在1999年错过了Mozilla的保护。 引用其中一位开发人员的话:

这是一个奇偶校验错误(和可能的尴尬来源),因为MSIE5这些types的页面没有问题。

我决定再深入一点,事实certificate,在2004年,这又发生了 。 但是,这次涉及到JavaScript

这是代码,是什么原因造成的:<iframe name =“productcatalog”id =“productcatalog”src =“page2.htm”> </ iframe>后面跟着一个脚本:frames.productcatalog.location.replace (frames.productcatalog.location + location.hash);

实际结果:父窗口被recursion加载到iframe中,导致有时会崩溃。

预期结果:只需在Internet Explorer中显示即可。

然后在2008年 再次与Firefox 2 (这也涉及JavaScript)。

再次在2009年 。 这里有趣的部分是,这个错误仍然打开的 ,这个附件: https://bugzilla.mozilla.org/attachment.cgi?id=414035 ://bugzilla.mozilla.org/attachment.cgi?id https://bugzilla.mozilla.org/attachment.cgi?id=414035 (你会抑制你的好奇心?)仍然会崩溃/冻结你的Firefoxtesting它,我几乎崩溃了整个Ubuntu)。 在Chrome中,它只是无限期地加载(可能是因为每个标签都在一个单独的进程中)。


至于其他浏览器:

  • 2005年, Konqueror在保护方面存在一个错误,允许将内联框架渲染到另一个框架中(但似乎它不会冻结/崩溃整个应用程序)。
  • 据悉 ,IE6,Opera 7.54和Firefox 0.9.3也易受基于iframerecursion的攻击。

我想添加一些东西到“另外,为什么甚至没有在这个IE崩溃? 问题的一部分。 IE不让我们失望…

如果你添加一个简单的迭代数字作为查询string到嵌套的iFrame的src Firefox,而其他的将在一定的迭代深度之后停止。 IE浏览器 – 我们testing了IE版本10 – 只是崩溃:)

this.php

 <html> <head></head> <body> <iframe src="this.php?q=<?php echo (isset($_GET['q'])?$_GET['q']:1)+1?>" /> </body> </html>