预检清单
我已经阅读了 Contributing Guidelines 项目的相关文档。
我同意遵循 Code of Conduct 项目所遵循的规定。
我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的特性,但没有成功。
问题描述
使用选项 nodeIntegrationInWorker
在工作线程中启用节点集成是不安全的,因为它使得任何具有该功能的工作者都可以访问非常强大的API,而无需对其进行控制。
建议解决方案
在 BrowserWindow 的 webPreferences 中添加一个名为 'preloadInWorker' 的标志,以指定在 Web Workers 中的任何其他脚本之前加载的脚本。该脚本将始终可以访问 node APIs,并且旨在引入将在 worker 范围内可见的全局符号,这些符号被认为是足够安全的,可以使用。这应该与 'preload' 选项的工作方式相同,但适用于 web worker 线程。
考虑的其他替代方案
无
其他信息
无
3条答案
按热度按时间wf82jlnq1#
See also discussion in #22582
zlhcx6iw2#
@codebytere 有什么办法可以帮助解决这个问题吗?我正在使用预加载来覆盖并隐藏一些敏感的API,以便在浏览器上下文中隐藏它们。然而,我发现它们实际上并没有在workers中加载。这意味着没有办法修复像Electron's broken atob/btoa implementation这样的问题,或者隐藏像电池/键盘/gpuinfo这样的API,使其无法被访问。这将有助于修复workers中的这些敏感API,从而提高web上下文的安全性。对于最新的electron 20和21版本,这仍然是一个相关的问题,因为目前没有办法在workers中运行预加载。
wrrgggsh3#
这个问题是在依赖需要访问某些(但不是所有)Node API的worker时,主要的安全加固障碍。为了让worker支持预加载脚本,需要做哪些工作?
从我了解的情况来看,类似于以下代码片段在 https://github.com/electron/electron/blob/db2bf1a0d1be6b81ca2d1a6b693b78753d3ba6ea/shell/renderer/web_worker_observer.cc#L48C25-L48C55 中加载当前worker的预加载脚本,是这样吗?
但是我假设还有一些其他步骤需要完成?一些快速的头脑 Storm :
也许对代码有更多了解的人可以告诉更多关于将此引入Electron的努力?从查看git历史记录来看,可能是@codebytere或@miniak?