【问题标题】:Electron, how to access node API without nodeIntegrationElectron,如何在没有 nodeIntegration 的情况下访问节点 API
【发布时间】:2019-02-26 07:59:10
【问题描述】:

我将外部内容加载到我的电子应用程序中,这可能不安全。我想以类的形式向这个卸载的内容公开一个 API。这个 API 类应该可以访问nodeIntegration 权限,但是我不希望不受信任的外部内容拥有这样的权限。不受信任的代码被加载到webview 中,API 类通过preload 加载到webview 中。脚本加载并创建了类,它可以毫无问题地执行我想要的所有功能。但问题是,在脚本完成加载后,我想保留在全局范围内的类被销毁。这个不受信任的代码访问我的 API 的唯一方法是这个类是否保留在全局范围内。 是否可以在可以访问 nodeIntegration 的预加载脚本中实例化一个类,并使非预加载脚本文件可以访问该类?

例子:

预加载脚本:

var API = function() {
    const fs = remote.require('fs');

    API.createFile = function(){
        /*... do stuff with fs here ...*/
    }
}

非预加载脚本(不受信任的代码)

var instanceOfAPI = new API();

instanceOfAPI.createFile(); //should work
fs.writeFile(); //should NOT work

【问题讨论】:

标签: javascript node.js class security electron


【解决方案1】:

将 API 放在 preload 脚本下的 window 变量中。示例:

var API = function() {
    const fs = remote.require('fs');

    API.createFile = function(){
        /*... do stuff with fs here ...*/
    }
}

window.api = new API();

以下内容现在适用于无权访问 nodeIntegration 的脚本

window.api.createFile() //works
fs.writeFile() //does not

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2020-01-24
    • 1970-01-01
    • 2012-07-07
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多