首页 > HTML5资讯 > 正文

12行js代码是如何让浏览器崩溃的

2018-03-28 09:33  来源:Techzero  评论:  点击:
继 一款插件给写代码带来的超爽视觉震撼 一文在朋友圈掀起一股狂潮之后,昨天多数人的朋友圈和空间又被一个恶搞链接占据荧幕,在应用中点击可以直接导致应用闪退,在浏览器中打开也能直接让浏览器崩溃。这是怎么做到的呢?下面就来研究一下。
12行js代码是如何让浏览器崩溃的

  继 一款插件给写代码带来的超爽视觉震撼 一文在朋友圈掀起一股狂潮之后,昨天多数人的朋友圈和空间又被一个恶搞链接占据荧幕,在应用中点击可以直接导致应用闪退,在浏览器中打开也能直接让浏览器崩溃。这是怎么做到的呢?下面就来研究一下。

  随便在网上以“十二行代码 浏览器”为关键词搜一下,就有一大堆类似结果:

 

  这十二行代码的起源应该是Twitter上的 IT Security Tweets TM @F1r3h4nd :

  Crash your friend’s browser and restart Iphone with a link which has this script: #0day// 把带有下面这个脚本的链接发给你的朋友,能让你朋友的浏览器崩溃,而且能让iPhone重启。

 

  完整HTML代码如下:


  有兴趣的可以点击这里测试一下。 【友情提醒:请先保存浏览器上的工作:) 拿来整人的被打死不负责哦~】

  点击完可能产生的后果:

  •   PC端用浏览器打开:点开链接以后,电脑CPU内存极有可能一路狂飙直至浏览器崩溃卡死。
  •   移动端(安卓、iPhone)用三方浏览器打开:点开链接以后浏览器会闪退。
  •   移动端(安卓、iPhone)用嵌入浏览器的应用打开:在微博、微信客户端中点开链接会闪退。
  •   iPhone用Safari打开:点开链接之后,手机可能会注销重启。

  以下是博主自己测试的结果:

 

 

  下面就来稍微解释一下上面这段js代码是如何让浏览器崩溃的。

  这段代码的核心就是 history.pushState() 方法。

  这个方法是 HTML5 的一个 API,用于向history添加当前页面的记录。简单来说就是在不刷新页面,也不打开新页面的情况下,改变浏览器地址栏中的URL。这个技术可以解决AJAX遗留下来的问题。它和AJAX结合后,有个新的称呼是PJAX(淘宝目前正在使用)。

  这里的代码:history.pushState(0, 0, total); 只能起到一个效果,就是修改URL(只能修改当前目录后的字符,无法修改全部域名。且不会发生跳转或发送请求)。然后这里代码循环了1000000次,也就是说URL修改了1000000次,每次新的URL都是之前一次的后面再加上 i.toString() 。这样快速不停地向history中添加记录,最终就会导致内存占用迅速增大到机器无法承受,然后浏览器崩溃。

  所以PC上面才会出现内存和CPU突然一路飙升,而手机的内存和处理器本身就跟PC没得比,所以崩溃也是自然的。至于iPhone上的Safari是如何让iPhone重启的,这个就不得而知了。

   来源: Techzero

   原标题:让浏览器爆炸的JavaScript:HTML5 API 之 history.pushState

文章转载请注明来自天晟网络 > HTML5资讯 >
标题:12行js代码是如何让浏览器崩溃的
网址:http://www.timsion.com/html5/25850.html

关键词:代码 浏览器崩溃 12行代码

上一篇:JavaScript的发明人艾奇经典杰作再现
下一篇:最后一页

免责声明:以上内容来自互联网和用户投稿,不代表本站的观点和立场,版权归原作者所有,如有侵权,请与我们联系。