【待补漏洞】Electron 报错 Uncaught ReferenceError: require is not defined

使用ipcRenderer渲染时
const electron = require(‘electron’);报错如下
【待补漏洞】Electron 报错 Uncaught ReferenceError: require is not defined_第1张图片
解决办法:

addWindow = new BrowserWindow({
......
webPreferences: {                                //在这里添加
            nodeIntegration: false, // 改为true 即可
            contextIsolation:false
        }
})

新版本Electron默认 nodeIntegration: false

这种方法存在漏洞,以下是问题描述(引用):
我希望这个答案能引起注意,因为这里的大多数答案都会在您的电子应用程序中留下很大的安全漏洞。事实上,这个答案本质上就是您应该require()在电子应用程序中使用的内容。(只有一个新的电子 API 使它在 v7 中更简洁一些)。

Electron 应用程序很棒,因为我们可以使用节点,但这种力量是一把双刃剑。如果我们不小心,我们会通过我们的应用程序让某人访问节点,并且使用节点的不良行为者可能会破坏您的机器或删除您的操作系统文件(除其他外,我想)。

解决方案:
解决方案是不让渲染器直接访问节点(即。require()),而是让我们的电子主进程访问require,并且在我们的渲染器进程需要使用require时,将请求编组到主进程。
这在 Electron 的最新版本(7+)中的工作方式是在渲染器端我们设置ipcRenderer绑定,在主端我们设置ipcMain绑定。在 ipcMain 绑定中,我们设置了使用我们的模块的侦听器方法require()。这很好,因为我们的主要过程require可以满足它的所有需求。
我们使用contextBridge将 ipcRenderer 绑定传递给我们的应用程序代码(使用),因此当我们的应用程序需要使用requiremain 中的 d 模块时,它通过 IPC(进程间通信)发送消息并且主进程运行一些代码,然后我们用我们的结果发回一条消息。
转载自:https://stackoverflow.com/questions/44391448/electron-require-is-not-defined/55908510#55908510

解决结果:
还是采用了第一种存在漏洞的方案,第二种方案暂时没能实现成功

你可能感兴趣的:(electron,electron,javascript,安全)