分佈式拒絕服務攻擊(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)
}
setInterval(imgflood, 10)
|
上述腳本每秒鐘會在頁面上建立10個image標籤。該標籤指向「victim-website.com」,並帶有一個隨機查詢參數。若是用戶訪問了包含這段代碼的惡意網站,那麼他就會在不知情的狀況下參與了對「victim-website.com」的DDoS攻擊,以下圖所示:html
許多網站都使用一套通用的JavaScript庫。爲了節省帶寬及提升性能,它們會使用由第三方託管的JavaScript庫。jQuery是Web上最流行的JavaScript庫,截至2014年大約30%的網站都使用了它。其它流行的庫還有Facebook SDK、Google Analytics。若是一個網站包含了指向第三方託管JavaScript文件的script標籤,那麼該網站的全部訪問者都會下載該文件並執行它。若是攻擊者攻陷了這樣一個託管JavaScript文件的服務器,並向文件中添加了DDoS代碼,那麼全部訪問者都會成爲DDoS攻擊的一部分,這就是服務器劫持,以下圖所示:java
這種攻擊之因此有效是由於HTTP中缺乏一種機制使網站可以禁止被篡改的腳本運行。爲了解決這一問題,W3C已經提議增長一個新特性子資源一致性。該特性容許網站告訴瀏覽器,只有在其下載的腳本與網站但願運行的腳本一致時才能運行腳本。這是經過密碼散列實現的,代碼以下:jquery
1
2
3
|
integrity
=
"sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg="
crossorigin
=
"anonymous"
>
|
密碼散列能夠惟一標識一個數據塊,任何兩個文件的密碼散列均不相同。屬性integrity提供了網站但願運行的腳本文件的密碼散列。瀏覽器在下載腳本後會計算它的散列,而後將得出的值與integrity提供的值進行比較。若是不匹配,則說明目標腳本被篡改,瀏覽器將不使用它。不過,許多瀏覽器目前還不支持該特性,Chrome和Firefox正在增長對這一特性的支持。web
中間人攻擊是攻擊者向網站插入惡意JavaScript代碼的最新方式。在經過瀏覽器訪問網站時,中間會通過許多節點。若是任意中間節點向網頁添加惡意代碼,就造成了中間人攻擊,以下圖所示:瀏覽器
加密技術能夠完全阻斷這種代碼注入。藉助HTTPS,瀏覽器和Web服務器之間的全部通訊都要通過加密和驗證,能夠防止第三者在傳輸過程當中修改網頁。所以,將網站設爲HTTPS-only,並保管好證書以及作好證書驗證,能夠有效防止中間人攻擊。安全
在回覆網友評論時,Nick指出,SRI和HTTPS是相輔相成的,兩者同時使用能夠爲網站提供更好的保護。除了上述方法外,採用一些防DDoS安全產品來增強防禦也是一種選擇。服務器