如果说有个网站一点开就会导致iPhone崩溃,那大多数人肯定会认为这是个病毒网站。事实并非如此,近日有网友称,点开网站“crashsafari.com”设备就会卡顿甚至重启。而在后续的试验中发现,OS X和iOS版的Safari浏览器受影响最明显,各平台的Chrome和火狐浏览器也未能幸免,几乎均以崩溃告终。
这一网站的源代码已被公开。crashsafari.com首次获得关注是在2015年4月,但在Hacker News上周刊文介绍之后,这一网站开始吸引主流人群的兴趣。
研究人员警告称,大家不要尝试点击这个恶意链接,也请大家不要再传播或者分享这条链接。
无论是在家还是在办公室,都请大家不要点击这条链接,也不要劝其他人去点击它。除此之外,也请大家不要将这条恶意链接通过邮件发送给他人,因为其他人有可能会点击这条链接。
没错,我们这样来建议大家不要点击这条链接,听起来有点史翠珊效应(史翠珊效应,即:试图阻止大众了解某些内容,或压制特定的网络信息,结果适得其反,反而使该事件为更多的人所了解,用中国一个成语就是欲盖弥彰)的感觉了,但是我们不得不这样做。
请各位苹果狂热粉们不要尝试去访问crashsafari dot com。
从技术层面上来看,这个网站实际上并不会使你的Safari浏览器崩溃,至少一开始不会。因为在你使用Mac或者iPhone访问这个网站之后,网站中的HTML代码会不断地对你的内存空间循环写入信息,直到你的设备崩溃为止。
可怕的是,这个流氓网站所使用的恶意代码却十分的简单,如下图所示:
HTML页面中所显示的文字信息如下图所示:
如果你不是一名程序员,你也不用担心,这个JavaScript脚本是很容易理解的。
这段脚本代码会创建大量的字符串,这些字符串中的数据从0开始,一直到99999,每一个字符串都是这些数字的组合序列,具体信息如下图所示:
每当一个新的字符串创建成功之后,浏览器会使用一个特殊的函数-history.pushState()来将这些字符串存储进浏览器的历史记录列表中,用户在访问了这个恶意网站之后,浏览器的历史记录便会立刻变成下图所示的样子:
在你浏览器的历史记录列表中,你最后得到的URL记录将会是所有从0至99999的数字组合,这个字符串的长度总共有1×10 + 2×90 + 3×900 + 4×9000 + 5×90000个字节。
光是这一个字符串就需要耗费0.5MB(488,890字节)的内存空间,而这只是列表中的最后一条记录而已。
当浏览器在内存中创建了100000条字符串记录,并放入历史记录列表时,所有字符串加起来的总长度将为488,890 + 488,885 + 488,880 … 3 + 2 +1字节。
所以,字符串的总大小并不是与脚本中的循环迭代次数成正比的,而是与循环次数的平方(100,000 x 100,000, 即 100亿)成正比的。
因为在浏览器的历史记录列表中,总共有100,000条记录,其中每一条记录平均会消耗250KBytes的内存空间。这样算来,总共将需要使用25GBytes大小的内存空间。
最后,Safari浏览器将会耗尽你计算机中的内存,系统将会无法响应用户的操作,所以你需要重启系统才能使系统恢复正常。
如果你足够耐心,你可以开启终端(终端窗口可能需要一段时间才会显示出来),然后运行命令killall -9 Safari,这段命令将会使OS X终止系统中的浏览器进程。
当然了,你也可以切换到Finder之中,然后在系统顶部的菜单中点击苹果图标,然后使用强制退出(Force Quit)功能来终止Safari进程。这种方法与我们在上面所介绍的方法结果是一样的。
因为Safari浏览器会一直请求内存空间,并占用CPU资源,所以在终止了浏览器进程之后,系统可能还需要等待一段时间系才能恢复正常。
下图显示的是系统在陷入了“crashsafari”循环期间,内存和CPU资源的使用情况:
系统回到正常之后,情况如下图所示:
这样的小技巧也能够适用于其他的浏览器吗?
我们使用火狐浏览器进行了测试,该浏览器在访问了这个恶意网址之后,会弹出一个警告对话框。在此期间,网页中的脚本代码将无法响应,所以用户很容易就可以关掉浏览器了。
至于其他的浏览器,我们还没有进行过测试。我们对最坏的情况进行了假设:因为对于任何的网页浏览器而言,处理大量内存数据的加载过程都是一个非常棘手的问题,不同品牌的浏览器都会采用不同的技术手段来与“恶意”页面进行斗争。
在此顺便提一下,我们并不是在开玩笑,我们再一次警告你:“不要去点击这条链接!”
虽然这只是一条链接,点击它也就是一瞬间的事情。但是如果你让你的朋友去点击了这条恶意链接,那么他们将需要终止Safari进程才可以使他们的计算机重新恢复正常,这不仅会浪费他们的时间,而且还有可能使他们在此之前未保存的信息全部丢失。
目前,唯一能处理这一网站的浏览器是微软的Edge浏览器,可能是因为Edge对这类脚本的响应机制不同吧。
苹果、谷歌和Mozilla很可能会调整浏览器对这类脚本的响应方式。很明显,火狐浏览器曾试图停止这一脚本。不过考虑到这并非安全问题,因此问题的解决可能需要等待较长时间。
从计算机安全的角度出发,“有了这样的朋友,谁还需要敌人呢?”,请你不要成为你朋友眼中的那种人。毕竟,我们现在在网络世界中已经有足够多的敌人了。