浅谈利用JavaScript进行的DDoS攻击原理与防御


Posted in Javascript onJune 04, 2015

分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击。Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师。近日,他撰文介绍了攻击者如何利用恶意网站、服务器劫持和中间人攻击发起DDoS攻击,并说明了如何使用HTTPS以及即将到来的名为“子资源一致性(Subresource Integrity,简称SRI)”的Web新技术保护网站免受攻击。

现代网站的大部分交互都来自于JavaScript。网站通过直接向HTML中添加JavaScript代码或者通过HTML元素<script src="">从远程位置加载JavaScript实现交互功能。JavaScript可以发出HTTP(S)请求,实现网页内容异步加载,但它也能将浏览器变成攻击者的武器。例如,下面的代码可以向受攻击网站发出洪水般的请求:

function imgflood() { 
   var TARGET = 'victim-website.com'
   var URI = '/index.php?'
   var pic = new Image()
   var rand = Math.floor(Math.random() * 1000)
   pic.src = 'http://'+TARGET+URI+rand+'=val'
  }
  setInterval(imgflood, 10)

上述脚本每秒钟会在页面上创建10个image标签。该标签指向“victim-website.com”,并带有一个随机查询参数。如果用户访问了包含这段代码的恶意网站,那么他就会在不知情的情况下参与了对“victim-website.com”的DDoS攻击,如下图所示:

浅谈利用JavaScript进行的DDoS攻击原理与防御

许多网站都使用一套通用的JavaScript库。为了节省带宽及提高性能,它们会使用由第三方托管的JavaScript库。jQuery是Web上最流行的JavaScript库,截至2014年大约30%的网站都使用了它。其它流行的库还有Facebook SDK、Google Analytics。如果一个网站包含了指向第三方托管JavaScript文件的script标签,那么该网站的所有访问者都会下载该文件并执行它。如果攻击者攻陷了这样一个托管JavaScript文件的服务器,并向文件中添加了DDoS代码,那么所有访问者都会成为DDoS攻击的一部分,这就是服务器劫持,如下图所示:

浅谈利用JavaScript进行的DDoS攻击原理与防御

这种攻击之所以有效是因为HTTP中缺少一种机制使网站能够禁止被篡改的脚本运行。为了解决这一问题,W3C已经提议增加一个新特性子资源一致性。该特性允许网站告诉浏览器,只有在其下载的脚本与网站希望运行的脚本一致时才能运行脚本。这是通过密码散列实现的,代码如下:

<script src="https://code.jquery.com/jquery-1.10.2.min.js" 
  integrity="sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg=" 
  crossorigin="anonymous">

密码散列可以唯一标识一个数据块,任何两个文件的密码散列均不相同。属性integrity提供了网站希望运行的脚本文件的密码散列。浏览器在下载脚本后会计算它的散列,然后将得出的值与integrity提供的值进行比较。如果不匹配,则说明目标脚本被篡改,浏览器将不使用它。不过,许多浏览器目前还不支持该特性,Chrome和Firefox正在增加对这一特性的支持。

中间人攻击是攻击者向网站插入恶意JavaScript代码的最新方式。在通过浏览器访问网站时,中间会经过许多节点。如果任意中间节点向网页添加恶意代码,就形成了中间人攻击,如下图所示:

浅谈利用JavaScript进行的DDoS攻击原理与防御

加密技术可以彻底阻断这种代码注入。借助HTTPS,浏览器和Web服务器之间的所有通信都要经过加密和验证,可以防止第三者在传输过程中修改网页。因此,将网站设为HTTPS-only,并保管好证书以及做好证书验证,可以有效防止中间人攻击。

在回复网友评论时,Nick指出,SRI和HTTPS是相辅相成的,二者同时使用可以为网站提供更好的保护。除了上述方法外,采用一些防DDoS安全产品来加强防护也是一种选择。

Javascript 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
js判断是否为数组的函数: isArray()
Oct 30 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
基于JavaScript实现移除(删除)数组中指定元素
Jan 04 Javascript
jquery自适应布局的简单实例
May 28 Javascript
Vuex模块化实现待办事项的状态管理
Mar 15 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
微信小程序自定义轮播图
Nov 04 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
js实现纯前端压缩图片
Nov 16 Javascript
js动态创建及移除div的方法
Jun 03 #Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 #Javascript
利用js实现禁止复制文本信息
Jun 03 #Javascript
详解JavaScript中循环控制语句的用法
Jun 03 #Javascript
讲解JavaScript中for...in语句的使用方法
Jun 03 #Javascript
JavaScript中for循环的使用详解
Jun 03 #Javascript
详解JavaScript的while循环的使用
Jun 03 #Javascript
You might like
上传多个文件的PHP脚本
2006/11/26 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php7性能提升的原因详解
2019/10/13 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python中字典和集合学习小结
2017/07/07 Python
python opencv实现运动检测
2018/07/10 Python
详解python持久化文件读写
2019/04/06 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python with语句的原理与用法详解
2020/03/30 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
竞聘上岗演讲稿
2014/05/16 职场文书
2014年班组工作总结
2014/11/20 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
初中语文教学随笔
2015/08/15 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle