ES9 新特性 SharedArrayBuffer 的安全问题及解决方案

阅读时长 4 分钟读完

在 ES9(ECMAScript 2018)中,新加入了 SharedArrayBuffer(共享内存数组)这一特性,它允许在多个 web worker(Web 工作线程)之间共享内存。这个新特性虽然带来了一些很棒的功能,但是也存在一些安全问题。

SharedArrayBuffer 的安全问题

在升级到 ES9 后,浏览器的 JavaScript 引擎就开始支持 SharedArrayBuffer,Web 应用程序可以使用它来提高多个线程之间的数据共享性能。但是由于浏览器的安全模型,使用 SharedArrayBuffer 对象存在以下几个安全问题:

  1. 跨站脚本(XSS)攻击:SharedArrayBuffer 存在多种针对浏览器漏洞的攻击方式,其中最常见的是跨站脚本攻击(XSS)。攻击者可以通过注入恶意 JavaScript 代码并在浏览器中执行来访问共享内存区域,这就给攻击者提供了一个共享内存攻击的门户。
  2. 崩溃:由于 SharedArrayBuffer 可以被多个线程访问和修改,因此任意线程意外修改了内存数据,可能导致程序崩溃。
  3. 数据泄露:SharedArrayBuffer 中的数据不受同源策略的限制,因此可能会面临数据泄露的风险。

因此,为了保证 SharedArrayBuffer 的安全性,必须采取一些安全措施。

SharedArrayBuffer 的安全解决方案

为了解决 SharedArrayBuffer 的安全问题,Chrome 和 Firefox 浏览器在 2018 年 5 月暂时禁用了它。在之后,浏览器厂商们开始运用新的安全措施,使得 SharedArrayBuffer 能够被安全地使用。

全局设置

首先是设置了全局标志位,标志位可以将 SharedArrayBuffer 对象的使用限制在同源环境中。因此,只有在同源页面之间使用 SharedArrayBuffer 才足够安全。这意味着如果你尝试从一个不同的源再次使用它,你将得到一个错误。

-- -------------------- ---- -------
-- ------------
-- -------------------------- -
  ------------------------------------------- - ---------- -
    -- --------------------- -
      ----- --- -------------
        ------- ------ ------- ------ -------------------
        ---------------
      --
    -
  -
-

强制浏览器重新检查安全性

另一种方法是强制浏览器重新检查 SharedArrayBuffer 的安全性。这种方法可以让浏览器能够识别不安全的场景。在 Chrome 和 Firefox 浏览器中,出现以下或类似提示:This document requires 'SharedArrayBuffer' which has been disabled.

跨域设置

另外,Chrome 和 Firefox 浏览器已经解决了 SharedArrayBuffer 可能会被用于跨站脚本攻击的问题。为了使跨站脚本攻击不再成立,Chrome 和 Firefox 浏览器在跨域请求中已经禁用了 SharedArrayBuffer。

下面是一个示例代码:

-- -------------------- ---- -------
----- ----------------- - --- ---------
  --------------- -------------------
  ----------------------------------- ----
---

----- -------- ------------ ---- - ---- -
  ----- --- - ----- ---------- -
    ------- ------
    ------------ ----------
    ----- -------
    -------- ------------------
    ----- ---------------------
    -- ---------
    ------- --- ------------------------
  ---
  -- -------- -
    ------ ----- -----------
  - ---- -
    -------------------------------
    ----- --- ----------------
  -
-

结论

虽然在 SharedArrayBuffer 的初始版本中存在一些安全问题,但浏览器厂商们已经采取了措施来解决这些问题,使得该特性能够被安全地使用。SharedArrayBuffer 是一个有大量潜力的特性,它为 Web 应用程序带来了更强大的多线程能力,也使得我们更容易地开发客户端和服务器的互操作性应用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674eb82fe884a3e30f295e6a

纠错
反馈