Open Zakariyya opened 4 years ago
date: 2016.03.02 tags: categories: 随笔
几天前在google+上看到这消息的。
事情的起因是这样的,国外一哥们Cyber Security在推特上发了这么一条推文:
这12行js代码能让手机或是电脑进入这网页后出现浏览器奔溃,假死…… 1月17号,有人发推,说这段代码能让火狐、chrome、safari浏览器奔溃,能让iphone重启。
完整 HTML 代码如下:
<html> <body> <script> var total=""; for (var i=0;i<1000000;i++){ total= total+i.toString (); history.pushState (0,0,total); } </script> </body> </html>
来看下这段代码,主要就是
total= total+i.toString(); history.pushState(0,0,total);
这两行代码执行1000000遍。 这段代码的核心真的就是 history.pushState() 方法。 这个方法是 HTML5 的一个 API,用于向history添加当前页面的记录。简单来说就是在不刷新页面,也不打开新页面的情况下,改变浏览器地址栏中的URL。这个技术可以解决AJAX遗留下来的问题。它和AJAX结合后,有个新的称呼是PJAX(淘宝目前正在使用)。 这里的代码:
history.pushState(0, 0, total);
只能起到一个效果,就是修改URL(只能修改当前目录后的字符,无法修改全部域名。且不会发生跳转或发送请求)。然后这里代码循环了1000000次,也就是说URL修改了1000000次,每次新的URL都是之前一次的后面再加上 i.toString() 。这样快速不停地向history中添加记录,最终就会导致内存占用迅速增大到机器无法承受,然后浏览器崩溃。
当然那段脚本不运行的话是没问题的,比如用w3m。
演示:www.0xroot.cn/demo.html(务必做好死机准备,尽管是假死。)
几天前在google+上看到这消息的。
事情的起因是这样的,国外一哥们Cyber Security在推特上发了这么一条推文:
这12行js代码能让手机或是电脑进入这网页后出现浏览器奔溃,假死…… 1月17号,有人发推,说这段代码能让火狐、chrome、safari浏览器奔溃,能让iphone重启。
完整 HTML 代码如下:
来看下这段代码,主要就是
这两行代码执行1000000遍。 这段代码的核心真的就是 history.pushState() 方法。 这个方法是 HTML5 的一个 API,用于向history添加当前页面的记录。简单来说就是在不刷新页面,也不打开新页面的情况下,改变浏览器地址栏中的URL。这个技术可以解决AJAX遗留下来的问题。它和AJAX结合后,有个新的称呼是PJAX(淘宝目前正在使用)。 这里的代码:
只能起到一个效果,就是修改URL(只能修改当前目录后的字符,无法修改全部域名。且不会发生跳转或发送请求)。然后这里代码循环了1000000次,也就是说URL修改了1000000次,每次新的URL都是之前一次的后面再加上 i.toString() 。这样快速不停地向history中添加记录,最终就会导致内存占用迅速增大到机器无法承受,然后浏览器崩溃。
当然那段脚本不运行的话是没问题的,比如用w3m。
演示:www.0xroot.cn/demo.html(务必做好死机准备,尽管是假死。)