HTML5安全風險詳析之四:Web Worker攻擊
一、WebWorker介紹
由于Javascript是單線程執行的,在執行過程中瀏覽器不能執行其它Javascript腳本,UI渲染線程也會被掛起,從而導致瀏覽器進入僵死狀態。使用WebWorker可以將計算過程放入一個新線程里去執行將避免這種情況的出現。這樣我們可以同時執行多個JS任務而不會阻塞瀏覽器,非常適合異步交互和大規模計算,這在以前是很難做到的。
【相關文章】:
下面一張圖形象的揭示了WebWorker的作用:沒有WebWorker時,如果我們要煎一個雞蛋餅,需要先和面粉,然后打雞蛋,最后才能煎餅;使用WebWorker,可以在和面粉的同時打雞蛋,這兩者同時進行,都完成后就能開始煎餅,極大的縮短了等待的時間。

但是這樣一個好的特性也會引入攻擊的可能。
二、WebWorker攻擊
1、Botnet
攻擊的方式包括DDos攻擊、發送垃圾郵件,用戶一旦訪問惡意頁面或者網站時,頁面的惡意代碼就能把用戶的瀏覽器當作肉雞,利用WebWorker大規模執行多線程攻擊,例如DDos攻擊、發送垃圾郵件或者進行網絡嗅探。

DDOS攻擊(分布式拒絕服務攻擊)
2、postMessage帶來的問題
WebWorker無法訪問DOM,只能通過postMessageAPI和主線程通信。postMessage在HTML5中被引入,用來解決跨域或者跨線程數據交互的問題。但是如果messaging可以接收任何來源的信息,此頁面有可能會被攻擊;另外postMessage不通過服務器,如果不經過驗證和過濾,可能成為XSS注入點。例如如下代碼沒有對輸入數據進行驗證和清洗,攻擊者完全可以構造惡意的data來注入頁面DOM,構造XSS攻擊,形如“><script></script>”等等。
- 01.worker.addEventListener(‘message’,function(e) {
- 02. document.getElementById(‘result’).innerHTML = e.data;
- 03.}, false);
三、攻擊工具
Ravan是一個JS的分布式計算系統,可以用HTML5Web Worker通過后臺加密的JS多線程腳本來執行蠻力攻擊。

四、預防之道
1、對于用戶來說,不要訪問不安全的站點。
2、使用postMessage時需要驗證來源可信;另外不要使用innerHTML,現代瀏覽器提供了textContent屬性,可以幫助對HTML標簽進行過濾,或者你可以自行編寫過濾的邏輯和函數。




















