让浏览器崩溃的12行JS代码(DoS攻击分析及防御)


Posted in Javascript onOctober 10, 2016

Ajax与pjax

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新-无刷新操作。

但是,ajax应用也会造成另外的问题,容易导致浏览器无法前进与后退,这是个很头疼的问题,开发人员必须增加工作量(比如通过一个隐藏的iframe,或者改变location.hash值等方法)来解决。

为了解决传统ajax带来的问题,HTML5里引入了新的API:history.pushState,它和ajax结合后,有个新的称呼是pjax。是一种基于ajax+history.pushState的新技术,该技术可以无刷新改变页面的内容,并且可以改变页面的URL。pjax是ajax+pushState的封装,同时支持本地存储、动画等多种功能。目前支持jquery、qwrap、kissy等多种版本。

让浏览器崩溃的12行JS代码(DoS攻击分析及防御)

HTML5.history.pushState

HTML5可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。

pushState是将指定的URL添加到浏览器历史里,存储当前历史记录点。replaceState是将指定的URL替换当前的URL。同时,这些方法会和window.onpostate事件一起工作。

history.pushState(data, title, url) : 往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器一般都会 忽略此参数;url为页面地址,可选,缺省为当前页地址。具体细节:

state?对象是一个JavaScript状态对象,记录历史记录点的额外对象,可以为空。它关系到由pushState()方法创建出来的新的history实体。用以存储关于你所要插入到历史记录的条目的相关信息。

title—所有浏览器一般都会 忽略此参数,虽然它可能将来会被使用上。而现在最安全的使用方式是传一个空字符串,以防止将来的修改,或者可以传一个简短的标题来表示state。

URL—这个参数用来传递新的history实体的URL,新的url必须和现有的url同域,否则pushState()将抛出异常。这个参数是选填的,如果为空,则会被置为document当前的url。

十二行代码分析

<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这个url的循环: history.pushState(0,0,total);不停的在修改url,循环了1000000次,不停的向历史记录堆栈中新增记录,会导致CPU和内存占用率过高以及firefox,chrome,safari浏览器崩溃,而且还能让iPhone重启。

让浏览器崩溃的12行JS代码(DoS攻击分析及防御)

在XP虚拟机(i7单核3.4G、512内存) 亲自实测:

     当上面那个循环次数为十万以上级别的时候,CPU,内存使用率瞬间100%,然后崩溃死机;

     当上面那个循环次数缩小到10000左右的时候,CPU,内存使用率大概在20秒内逐渐升高至100%,然后崩溃死机;

     当上面那个循环次数缩小到500左右的时候, CPU使用率逐渐升高到达100%后,再次瞬间恢复到稳定状态,内存使用从130M左右升高至230M左右,而打开的192.168.56.106/12.html这个页面后,地址栏里面的链接也变成了:http://192.168.56.106/0123456789101112131415161718192021…… 494495496497498499

可见,通过循环不停的向向历史记录堆栈中新增记录的同时,页面会刷新到跳转的新地址,就是循环累加的一个“伪地址”,当这个长度超限的时候,就会引起dos了,攻击的效果和效率完全取决于循环的次数和tagret的硬件配置。

相关的防御

相信大家的安全意识已经非常的强悍了,但是还是要警钟长鸣,不要轻信任何陌生人通过任何方式发给你的链接、附件、邮件、图片等任何信息,当然不排除好基友们损友们的恶作剧了,所以小伙伴儿们记得经常Ctrl+S哦,否则被搞死机了也会很郁闷的。

互联网自诞生之日起,就暴露在黑客攻击之下,早期的黑客攻击多少还带有技术试验和炫耀的目的,但随着全球互联网基础设施规模的壮大、连接的无限增长和用户数的急剧膨胀,黑客攻击频率也相应增加,黑客技术也在不断的发展,逐渐出现了以非法获取经济利益为目的的黑色产业链。针对互联网安全防护的技术水平更是突飞猛进,道高一尺魔高一丈,攻与防,在这个互联网时代每分每秒都正在发生着。

网络安全的防护,七分靠技术,三分靠意识,要防护这些问题,除了依靠安全厂商的产品和服务,还需要不断提高网络安全意识。比如:注意个人密码的管理、注意个人隐私的保护、不要轻易接入公共的wifi、不要轻易相信陌生/熟悉朋友的链接或者文件等、注意移动支付的安全、不要让设备“裸奔”等等

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
js获取html页面节点方法(递归方式)
Dec 13 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
javascript实现一个简单的弹出窗
Feb 22 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
解决vue路由后界面没有变化,但是链接有的问题
Sep 01 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 #Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 #Javascript
浅谈jquery中使用canvas的问题
Oct 10 #Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 #Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 #Javascript
js监听键盘事件的方法_原生和jquery的区别详解
Oct 10 #Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 #Javascript
You might like
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
jQuery 位置插件
2008/12/25 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
星球大战与Python之间的那些事
2016/01/07 Python
python实现输入数字的连续加减方法
2018/06/22 Python
基于python实现高速视频传输程序
2019/05/05 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python气泡提示与标签的实现
2020/04/01 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
办公室人员先进事迹
2014/01/27 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
汉字听写大会观后感
2015/06/12 职场文书
施工安全责任协议书
2016/03/23 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python