1、WebWorker介紹跨域
因爲Javascript是單線程執行的,在執行過程當中瀏覽器不能執行其它Javascript腳本,UI渲染線程也會被掛起,從而致使瀏覽器進入僵死狀態。使用WebWorker能夠將計算過程放入一個新線程裏去執行將避免這種狀況的出現。這樣咱們能夠同時執行多個JS任務而不會阻塞瀏覽器,很是適合異步交互和大規模計算,這在之前是很難作到的。瀏覽器
下面一張圖形象的揭示了WebWorker的做用:沒有WebWorker時,若是咱們要煎一個雞蛋餅,須要先和麪粉,而後打雞蛋,最後才能煎餅;使用WebWorker,能夠在和麪粉的同時打雞蛋,這二者同時進行,都完成後就能開始煎餅,極大的縮短了等待的時間。安全
可是這樣一個好的特性也會引入攻擊的可能。服務器
2、WebWorker攻擊網絡
一、Botnet多線程
攻擊的方式包括DDos攻擊、發送垃圾郵件,用戶一旦訪問惡意頁面或者網站時,頁面的惡意代碼就能把用戶的瀏覽器看成肉雞,利用WebWorker大規模執行多線程攻擊,例如DDos攻擊、發送垃圾郵件或者進行網絡嗅探。異步
DDOS攻擊(分佈式拒絕服務攻擊)分佈式
二、postMessage帶來的問題函數
WebWorker沒法訪問DOM,只能經過postMessageAPI和主線程通訊。postMessage在HTML5中被引入,用來解決跨域或者跨線程數據交互的問題。可是若是messaging能夠接收任何來源的信息,此頁面有可能會被攻擊;另外postMessage不經過服務器,若是不通過驗證和過濾,可能成爲XSS注入點。例如以下代碼沒有對輸入數據進行驗證和清洗,攻擊者徹底能夠構造惡意的data來注入頁面DOM,構造XSS攻擊,形如「><script></script>」等等。工具
3、攻擊工具
Ravan是一個JS的分佈式計算系統,能夠用HTML5Web Worker經過後臺加密的JS多線程腳原本執行蠻力攻擊。
4、預防之道
一、對於用戶來講,不要訪問不安全的站點。
二、使用postMessage時須要驗證來源可信;另外不要使用innerHTML,現代瀏覽器提供了textContent屬性,能夠幫助對HTML標籤進行過濾,或者你能夠自行編寫過濾的邏輯和函數。