问题标签 [sharedarraybuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
197 浏览

next.js - 有没有办法使用 Google Adsense 进行跨源隔离?

我正在开发一个使用依赖的网站SharedArrayBuffer,要使用SharedArrayBuffer您的网站需要跨源隔离,这意味着您的服务器响应需要包含以下标头:

我正在使用 next.js 并且标头似乎正在工作,因为我可以使用crossOriginIsolated全局变量检查跨源隔离。

似乎它正在破坏 Google Adsense,因为它给了我这些错误。

有任何想法吗?

提前致谢。

0 投票
1 回答
281 浏览

webassembly - 是否可以在普通页面中嵌入跨域隔离的 iframe?

换句话说,如果我不能sharedArrayBuffer在我的主站点中使用,我可以打开一个 iframe 并sharedArrayBuffer在 iframe 内使用吗?

2021 年 3 月有人问过类似的问题,当时接受的答案是“否”。但是,最近的google blogpost似乎暗示并非如此,所以我想再问一次。

所以我想在我的站点中使用一些带有 sharedArrayBuffer 的 wasm,但是让它跨域隔离是不切实际的,所以我创建了另一个站点https://my-wasm-function.app,它跨域隔离的。我希望将其用作 iframe,并通过postMessage.

但是,我发现一旦它作为 iframe 嵌入,它就会失去隔离状态。

博文有一些关于如何隔离 iframe 的模糊说明,一个是添加标题(我认为是在andCross-Origin-Resource-Policy: cross-origin之上),我试过了,没有用。另一种是像这样打开iframe:,我也试过了,也没有用。COOPCOEP<iframe allow="cross-origin-isolated">

0 投票
0 回答
42 浏览

sharedarraybuffer - 什么是顶级文件?(未定义 sharedArrayBuffer )

我打算用sharedArrayBuffer. 我发现如果没有建立交叉隔离,就无法使用。

在文档中, Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp 都应该在顶级文档中设置,但不知道顶级文档是什么以及如何设置。

我应该怎么办?

0 投票
0 回答
75 浏览

sandbox - Chrome 扩展沙盒 iFrame 中的 SharedArrayBuffer

我试图SharedArrayBuffer通过设置一个跨域隔离的文档来使用。但是,由于它位于 Google Chrome 扩展程序中并且我需要 WebAssembly,因此我需要在沙盒页面中运行它。

我有一个沙盒页面,在 manifest.json 中定义为这样

而且我还使用 COOP 和 COEP 启用了跨域隔离。

除了使用这个sandbox.html脚本之外什么都不做:

然后我有一个outer.html嵌入sandbox.htmliFrame 的页面。

当我打开时outer.html,我收到消息“BAD am not crossOriginIso”,即sandbox.htmliFrame 内的文档不是跨域隔离的(我不能使用SharedArrayBuffer)。

有没有办法在内部文档被沙盒化的 iFrame 中使用清单 v3 在 Chrome 扩展中启用跨域隔离(通过manifest.json)。

也许更具体地说,如何featurePolicy.allowedFeatures()向沙盒 iFrame 添加更多内容(它是在 Chrome 扩展程序的沙盒中manifest.json,而不是sandbox属性)。

我注意到以下几点:

  • 没有iFrame直接打开sandbox.html,页面是跨域隔离的。
  • 删除该sandbox属性会manifest.json导致 iframe 内的文档被跨域隔离。
  • 在 iFrame 内执行document.featurePolicy.allowedFeatures()会提供非常小的功能列表(并且不包括cross-origin-isolated)。这个列表比sandbox.html直接打开时执行相同的命令要小很多。
0 投票
1 回答
56 浏览

firebase - Firebase 托管:标头未生效(COEP 和 COOP http 标头)

我想设置标题 Cross-Origin-Embedder-Policy: require-corpCross-Origin-Opener-Policy: same-origin所以我可以启用SharedArrayBuffer,所以我可以使用https://github.com/ffmpegwasm/ffmpeg.wasm

我已经设置了这些firebase.json,但是console.log(crossOriginIsolated)产量false,以及任何使用 FFmpeg 错误的尝试SharedArrayBuffer is not defined。模拟器和部署的站点都会发生这种情况。

我正在ffmpegwasm从 jsdeliver加载<script src="https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.10.1/dist/ffmpeg.min.js" crossorigin="true"></script>

这是我的完整firebase.json(只是一个简单的演示项目),底部有标题:

我究竟做错了什么?谢谢!

0 投票
1 回答
87 浏览

javascript - 使用服务工作者启用 COOP/COEP 标头:安全问题?

我无法访问我的服务器以启用 COOP 和 COEP 标头,但我可以使用以下脚本通过服务工作者添加它们https://github.com/gzuidhof/coi-serviceworker,该脚本注册了一个服务工作者标题处于活动状态。

我需要 COOP 和 COEP 才能启用SharedArrayBuffer,这是为了避免受到 Spectre 和 Meltdown 的影响而受到限制。

我的问题是通过服务工作者添加 https 标头是否会带来安全风险,因为标头未在服务器级别设置。

在本文的底部,它认为这不是风险, https://dev.to/stefnotch/enabling-coop-coep-without-touching-the-server-2d3n

但我希望能得到一个解释,以更好地了解服务工作者方法是否同样安全,或者留下开放的漏洞。

谢谢!

0 投票
1 回答
96 浏览

javascript - 如何检测浏览器是否支持 SharedArrayBuffer?

我在我的网站中使用 ffmpeg.wasm 但它仅在浏览器支持 SharedArrayBuffer 时才有效。如果浏览器支持它,是否有一种简单的方法可以使用 javascript(浏览器 js 或 nodejs)进行测试?我认为的一种解决方案是将用户代理与本网站提供的列表进行比较,但这太冗长了,我猜是否没有更简单的方法?

0 投票
1 回答
46 浏览

webassembly - 将 SharedArrayBuffer 与第三方 JS 一起使用时遇到问题

我添加了响应头(“Cross-Origin-Opener-Policy”、“same-origin”)以使用 SharedArrayBuffer(以支持 webassembly)。但是现在我在我的页面中添加第三方 JS 时遇到了麻烦,这将被跨域隔离所阻止。将第三方 JS 与 webassembly 一起使用的任何解决方法?

0 投票
2 回答
216 浏览

javascript - Iframe 中的 SharedArrayBuffer

因此,SharedArrayBuffer 最近仅限于跨域隔离页面作为安全修复。

我们有一个依赖于 SharedArrayBuffer 的工具,我通过将它移动到一个去掉所有其他站点 UI 的准系统页面并发送以下标头来重新设计它以再次工作:

尝试将它加载到成熟网站的 iframe 中会给我带来控制台错误SharedArrayBuffer will require cross-origin isolation as of M92,然后是ReferenceError: SharedArrayBuffer is not defined- 与我在跨域隔离最小页面本身上的工具之前得到的相同。

我试图在其中包含 iframe 的页面不是跨域隔离的。如果不是不可能,那将是非常困难的。我根本不需要从父页面与 iframe 交谈,这只是一种方便/风格的东西。目前的生产解决方案只是将用户链接到新窗口中的最小跨源工具页面,但这很尴尬。

我希望有一些 iframe沙盒属性的组合或者可以使这项工作正常进行的东西?我为此奋斗了几个小时。

据我所知,这可能不可行。

0 投票
0 回答
18 浏览

node.js - 可以通过 Node 中的垃圾收集拾取 SharedArrayBuffer 吗?

我正在尝试使用工作线程构建一个 Node 应用程序,分为三个部分。

  • 委托任务的主线程
  • 更新共享数据的专用工作线程
  • 对共享数据运行计算的工作线程池

共享数据以几个SharedArrayBuffer对象的形式运行,就像一个伪数据库。我希望能够在不需要暂停计算的情况下更新数据,而且我可以使用稍微陈旧的数据完成一些任务。我想出的流程是:

  1. 主线程将数据传递给更新线程
  2. 更新线程创建一个全新SharedArrayBuffer的并用更新的数据填充它。
  3. 更新线程将指向新缓冲区的指针返回给主线程。
  4. 主线程将最新的指针缓存在一个变量中,覆盖其先前的值,并将其传递给每个任务的每个工作线程。
  5. 工作线程在执行操作后根本不保留这些指针。

问题是,当我运行一个经常进行更新并换出共享缓冲区的原型时,这似乎会在常驻状态堆栈中产生内存泄漏。垃圾收集似乎会通过几次删除丢弃的缓冲区,但随后它会不断攀升,直到应用程序变慢并最终挂起或崩溃。

当我完成它时,我如何保证它SharedArrayBuffer会被垃圾收集拾取,或者它甚至可能?我已经看到暗示,只要从所有线程中删除对它的所有引用,它最终就会被拾取,但不是一个明确的答案。

我正在使用threads.js库来抽象工作线程操作。这是我的原型的摘要:

应用程序.ts:

writer-worker.ts:

计算工作者.ts