使用JavaScript崩溃火狐浏览器

7

我是测试团队的一员,被要求在Firefox浏览器中使用JavaScript进行“恶意行为”测试。我尝试了这些方法来关闭浏览器,但它们只会引起弹窗提示关闭脚本,并没有更糟糕的影响。

还有其他想法吗?


18
听起来像是:给我找出关于leet zero-dayz的段错误! - Aiden Bell
3个回答

10
有点类似于“分叉炸弹”。
<html>
<body>
<a href="#" onclick="die()">click me!</a>
<script>
function die () {
  setTimeout(function () {die(); die()}, 0)
}
</script>
</body>
</html>

它无法被FF 3.6及以下版本停止(除非用户恰好足够快地关闭违规标签)。你让它运行的时间越长,它就会变得更加凶残。最终,它将吞噬进程可用的所有内存。CPU的负载也应该增加。某些操作系统比其他操作系统更能处理不良FF的情况。如果每个周期还施加适当的DOM负载,可以使其更加退化。
编辑:“仅为了世界的利益使用这些知识。” :-)

1
我正在使用Firefox 13,但它仍然无法免疫此类问题。几分钟后,Firefox弹出"对不起"的提示框。 - bwDraco
2
糟糕,这个漏洞真让人头疼。在32位版本的Firefox上,这是一种易受DoS攻击的情况,几分钟后Firefox就会崩溃。在64位Firefox上更糟糕(例如在x86-64 Linux上):浏览器可能会分配几乎无限的内存,导致机器由于交换而被锁定,直到OOM killer检测到它或在没有类似功能的系统上,彻底崩溃整台电脑。这个问题确实需要修补。 - bwDraco
@DragonLord 真是太遗憾了。我本来期望处理程序数量有一些内部的限制,不知道其他浏览器会怎么样。但是,如果我曾经访问过这样的网站,我将永远不会回去;) - user166390
1
病毒可以将此代码注入Firefox加载的每个页面的DOM中,从而禁用浏览器。 - bwDraco
刚刚将这段代码粘贴到 Firefox 59 的网络控制台中,令人惊讶的是,它似乎仍然可以工作! - qbt937

6

脚本执行时间看门狗是很好的,但它不能解决模态循环问题。跳转到 alertconfirmprompt 框会停止计时器,导致以下情况:

<script>while(true) alert('alert bomb');</script>

很难逃脱,还有这个:
<body onbeforeunload="while(true) alert('alert bomb');">

非常难以实现。(要准备好任务管理器。)

使用难以逃脱的模态循环是侵略型间谍软件安装页面的常用策略。(“点击‘是’立即安装呕吐条或面对无尽的警告框...”)


3
这里Chrome比Firefox更好;http://tinypic.com/r/54smer/5 - Matt
1
最烦人的事情之一...永远! - user166390
2
谷歌浏览器提供了在第一个框之后终止脚本的选项。 - Nathan Osman

2
我曾经通过一次大规模的DOM插入操作,成功地让我的Firefox崩溃了多次,这次操作涉及到了10,000个以上的元素。
具体来说,用户点击一个按钮触发了一个jQuery AJAX调用。该调用返回一个完整的HTML文件,然后使用jQuery将其附加到特定的div中。
<script>
  $("div.content").empty();
  $("div.content").html(data);
</script>

一旦数据被添加,它会尝试解析整个数据块并为树中的基本每个元素添加onClick和onHover事件。请放心,每次运行此函数时,我的浏览器都会崩溃。它会弹出通常的“脚本运行缓慢,您要取消吗”的提示,但我无法取消它,并且总是不得不使用CTRL+ALT+DEL来关闭浏览器。顺便说一下,我从未打算进行10000个元素的插入,这是我的错误。我正在查询一个带有JOIN的数据库,并打算使用SELECT DISTINCT,但我却使用了SELECT,因此由于连接返回了10000个元素而不是100个元素。糟糕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接