Chrome 为什么自引用iframe不会无限循环并使我的机器崩溃?

gz5pxeao  于 2022-12-30  发布在  Go
关注(0)|答案(3)|浏览(107)

我使用iframe创建了一个简单的HTML页面,其src属性引用包含它的页面--换句话说,是一个自引用iframe。

此.html

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

为什么这不是无限循环和崩溃我的浏览器?还有,为什么IE浏览器不会崩溃呢?
(Note:这是团队讨论使用iframe解决问题的优点和缺点的结果。你知道,就像“镜子中的镜子”一样。)

dgtucam1

dgtucam11#

W3C在1997年解决了这个问题,解释了应该如何在"Implementing HTML Frames"中实现帧:
任何试图将其祖先使用的URL指定为SRC的帧都被视为根本没有SRC URL(基本上是空白帧)。

Iframe递归错误/攻击历史记录

正如kingdago发现并在上面的评论中提到的,一个错过了实现这一保护的浏览器是Mozilla在 * 1999 *。
这是一个奇偶校验错误(也是一个可能的麻烦来源),因为MSIE5对这类页面没有问题。
我决定对此进行深入研究,结果发现在 * 2004 * 发生了again。然而,这次涉及到JavaScript
This is the code, what causes it: directly followed by a script with this in it: frames.productcatalog.location.replace(frames.productcatalog.location + location.hash);
...
实际结果:父窗口递归加载到iframe中,有时会导致崩溃。
预期结果:就像在Internet Explorer中一样显示它。
然后again在 * 2008 * 与Firefox 2(这也涉及JavaScript)。
以及 * 2009 * 中的again。这里有趣的部分是这个bug仍然开放,并且这个附件:https://bugzilla.mozilla.org/attachment.cgi?id=414035(你能克制一下你的好奇心吗?)仍然会让你的Firefox崩溃/冻结(我刚刚测试了它,我几乎让整个Ubuntu崩溃)。在Chrome中,它只会无限期加载(可能是因为每个标签都存在于一个单独的进程中)。
至于其他浏览器:

  • 在 * 2005 * Konqueror有一个错误,在它的保护,允许渲染iframes one inside another(但似乎不知何故,它没有冻结/崩溃整个应用程序)。
  • IE6、Opera 7.54和Firefox 0.9.3也是reported,容易受到基于iframe递归的攻击。
70gysomp

70gysomp2#

我想补充一点东西到 “还有,为什么不甚至IE崩溃在这?" 问题的一部分。IE不会让我们失望...
如果你在嵌套的iFrame的src中添加一个简单的迭代号作为查询字符串,Firefox和其他程序在达到一定的迭代深度后就会停止。IE --我们在IE版本10中测试过--只是崩溃:)

此.php文件

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

mznpcxlj3#

IE 6.0在没有脚本的情况下可能会崩溃:

<iframe src="this.html?c=9"></iframe>

我不知道为什么这不触发循环检测,也不知道它是否改变了。
编辑:了解原因。因为它是本地文件,?之后的URL被忽略,所以只有this.html被标记为已访问,而不是this.html?c=9

相关问题