本文解析利用JavaScript发起DDoS攻击的三种主要方式:恶意脚本注入、第三方库劫持及中间人攻击。重点介绍W3C提出的子资源一致性(SRI)技术,通过密码散列验证脚本完整性,并结合HTTPS加密传输,有效防止恶意代码执行,提升网站安全性。
DDoS攻击概述与防御背景
分布式拒绝服务(DDoS)攻击是针对网站最古老且常见的攻击手段之一。CloudFlare系统工程师Nick Sullivan撰文指出,攻击者可能利用恶意网站、服务器劫持或中间人攻击来发起DDoS攻击。文章同时探讨了如何利用HTTPS以及即将推出的“子资源一致性(SRI)”Web技术来保护网站免受此类攻击。
JavaScript DDoS攻击原理
现代网站的交互功能主要依赖JavaScript实现,通常通过直接在HTML中嵌入代码或使用<script src="">标签从远程加载。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攻击,具体效果如下图所示:

服务器劫持与子资源一致性(SRI)
众多网站采用通用的第三方托管JavaScript库以节省带宽并提升性能。jQuery作为Web上最流行的库,截至2014年约有30%的网站在使用,其他流行库还包括Facebook SDK和Google Analytics。若网站包含指向第三方托管JavaScript文件的script标签,所有访问者都会下载并执行该文件。一旦攻击者攻陷托管服务器并在文件中植入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正在逐步增加支持。
中间人攻击与HTTPS防御
中间人攻击是攻击者向网站插入恶意JavaScript代码的最新手段。在浏览器访问网站的过程中,数据需经过多个节点。若任意中间节点向网页注入恶意代码,即构成中间人攻击,具体过程如下图所示:

加密技术可彻底阻断此类代码注入。通过HTTPS,浏览器与Web服务器之间的所有通信均经过加密和验证,可防止第三方在传输过程中修改网页内容。因此,将网站设置为仅支持HTTPS,并妥善保管证书及做好证书验证,可有效防范中间人攻击。
在回复网友评论时,Nick指出,SRI与HTTPS相辅相成,二者结合可为网站提供更强大的保护。除上述方法外,采用专业的防DDoS安全产品进行加固也是可行的选择。