一、Web Worker 概述
JavaScript 天生采用单线程模型,这意味着一旦某个任务耗时较长,浏览器就会卡顿——其他脚本无法执行,UI 渲染也被迫等待,整个页面仿佛僵住。Web Worker 的出现有效解决了这一痛点:它允许将计算密集型任务交由独立线程处理,主线程仍可照常运行,互不干扰。这样一来,我们能够同时执行多个 JS 任务而不会拖垮浏览器,尤其适合异步交互和大规模计算场景。在过去,这几乎是难以实现的。
下面这张图生动展示了 Web Worker 的作用:没有它时,做煎饼需要先和面、再打鸡蛋、最后下锅煎,只能按顺序排队;引入 Web Worker 后,和面和打鸡蛋可以同步进行,等这两步都完成后再一起煎,等待时间大幅缩短。

然而,如此优秀的特性也难免被恶意利用,从而带来安全风险。
二、Web Worker 攻击方式
1、Botnet(僵尸网络攻击)
攻击方式包括 DDoS 攻击、发送垃圾邮件等。一旦用户访问了恶意页面,页面中的恶意代码就能将用户的浏览器当作肉鸡,利用 Web Worker 大范围执行多线程攻击——例如发起分布式拒绝服务攻击、批量发送垃圾邮件,甚至进行网络嗅探。这类攻击隐蔽性强,因为所有计算都在浏览器后台进行,用户很难察觉。

DDoS 攻击(分布式拒绝服务攻击)
2、postMessage 引发的安全风险
Web Worker 无法直接操作 DOM,只能通过 postMessage API 与主线程通信。postMessage 是 HTML5 引入的机制,用于解决跨域或跨线程的数据交互问题。但如果消息传递允许接收任意来源的信息,页面就可能遭受攻击;更关键的是,postMessage 不经过服务器,若接收端不对数据进行验证和过滤,它就可能成为 XSS 注入的突破口。例如下面这段代码,没有对输入数据做任何清理,攻击者完全可以构造恶意 data 注入页面 DOM,像 "> 这样的代码就能成功执行。

三、攻击工具
Ravan 是一个基于 JavaScript 的分布式计算系统,它利用 HTML5 的 Web Worker,通过后台加密的多线程脚本执行暴力破解攻击。换句话说,攻击者可以利用它将用户的浏览器变成集群中的一个计算节点,用于破解密码或其他暴力计算任务。

四、防范措施
1、用户层面: 尽量不访问不安全的站点,这是最基本的安全防线。
2、开发者层面: 使用 postMessage 时务必验证消息来源是否可信;另外,尽量避免使用 innerHTML 插入内容,现代浏览器提供的 textContent 属性可以帮助过滤 HTML 标签,或者自行编写一套严格的过滤逻辑和函数来清洗数据。
以上内容基本涵盖了 Web Worker 攻击的主要风险及应对思路。归根结底,技术本身是中性的,关键在于如何运用——用得恰当是利器,用偏了则成为漏洞。
