浅谈JS DDoS攻击原理与防护

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

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

?
1
2
3
4
5
6
7
8
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攻击,以下图所示:html

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

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

?
1
2
3
         integrity = "sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg="
         crossorigin = "anonymous" >

  密码散列能够惟一标识一个数据块,任何两个文件的密码散列均不相同。属性integrity提供了网站但愿运行的脚本文件的密码散列。浏览器在下载脚本后会计算它的散列,而后将得出的值与integrity提供的值进行比较。若是不匹配,则说明目标脚本被篡改,浏览器将不使用它。不过,许多浏览器目前还不支持该特性,ChromeFirefox正在增长对这一特性的支持。web

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

  加密技术能够完全阻断这种代码注入。借助HTTPS,浏览器和Web服务器之间的全部通讯都要通过加密和验证,能够防止第三者在传输过程当中修改网页。所以,将网站设为HTTPS-only,并保管好证书以及作好证书验证,能够有效防止中间人攻击。安全

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

相关文章
相关标签/搜索