为什么我在将我的Electron项目更新到最新版本后会看到“Electron安全警告”?

ryhaxcpt  于 11个月前  发布在  Electron
关注(0)|答案(7)|浏览(195)

我已经从this Vuetify's boilerplate创建了Electron-Vuejs-Vuetify项目
我在控制台看到这个警告:

Electron Security Warning 
This renderer process has Node.js integration enabled and 
attempted to load remote content. This exposes users of this app to severe security risks.

For more information and help, consult https://electronjs.org/docs/tutorial/security

字符串

提问:

什么可能导致这个问题- Node,Vue.js,webpack的localhost配置?我该怎么办?

laawzig2

laawzig21#

main.js中添加以下行:
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
但是,您应该阅读Security, Native Capabilities, and Your Responsibility以充分理解这样做的含义。

91zkwejq

91zkwejq2#

你有这个:
电子安全警告此呈现器进程已启用Node.js集成并尝试加载远程内容。这会使此应用的用户面临严重的安全风险。
因为从Electron Documentation的第二条安全建议中

2)禁用远程内容的Node.js集成

在加载远程内容的任何呈现器(BrowserWindow、BrowserView或WebView)中禁用Node.js集成是至关重要的。这样做的目的是限制授予远程内容的权限,从而使攻击者在用户获得在您的网站上执行JavaScript的能力时,更难对其造成伤害。
在此之后,您可以授予特定主机的其他权限。例如,如果您打开的是指向“https://my-website.com/“的BrowserWindow,则可以给予该网站提供所需的功能,但不能提供更多。
为什么?为什么?
如果攻击者能够跳出呈现器进程并在用户计算机上执行代码,则跨站脚本(XSS)攻击更加危险。跨站脚本攻击相当常见--尽管是个问题,禁用Node.js集成有助于防止XSS升级为所谓的“远程代码执行”(RCE),攻击
怎么做的?

// Bad
const mainWindow = new BrowserWindow()
mainWindow.loadURL('https://my-website.com')

// Good
const mainWindow = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false,
    preload: './preload.js'
  }
})

mainWindow.loadURL('https://my-website.com')

个字符
停用Node.js整合时,您仍然可以将使用Node.js模块或功能的API公开给您的网站。预先载入指令码仍然可以存取require和其他Node.js功能,让开发人员可以将自订API公开给远端载入的内容。
在下面的示例预加载脚本中,稍后加载的网站将可以访问window.readConfig()方法,但不能访问Node.js功能。

const { readFileSync } = require('fs')

window.readConfig = function () {
  const data = readFileSync('./config.json')
  return data
}


因此,系统会警告您,以便您可以禁用远程内容的Node.js集成
我希望这有助于回答你的问题。

guicsvcw

guicsvcw3#

Electron security checklist提到了如何处理安全警告。特别是,当从file:协议提供index.html服务时(您不能使用HTTP CSP头),可以使用Meta标记用于相同的目的,如安全检查表中所述:CSP HTTP头。
建议使用

<meta http-equiv="Content-Security-Policy" content="default-src 'none'" />

字符串
.但我发现(在GitHub here上得到了帮助)这个更实用,因为它允许使用script src

<meta http-equiv="Content-Security-Policy" content="script-src 'self';" />


关于content-security-policy.com上的CSP的更多信息。

f8rj6qna

f8rj6qna4#

添加

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

字符串
这样,错误信息就会消失。


的数据

z31licg0

z31licg05#

较新版本的electron Vue模板具有以下 * 警告 *,这些警告以前在beta版中使用以下命令禁用:

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

字符串
现在需要在index.js中执行以下操作:

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1';

shyt4zoc

shyt4zoc6#

从Electron 2.0开始,开发人员将看到打印到开发人员控制台的警告和建议。它们仅在二进制文件的名称为Electron时显示,这表明开发人员正在查看控制台。
我建议您遵循Electron官方安全建议清单,以避免这些警告https://github.com/electron/electron/blob/master/docs/tutorial/security.md

alen0pnh

alen0pnh7#

TLDR:在BrowserWindow选项中禁用eval()。
我刚刚在最新的电子,vue等上经历了这个过程,解决方案是禁用eval(),这可能是一个安全风险,因为它执行的代码不是来自你(或你的应用程序)。
在窗口创建期间将allowEval: false添加到webPreferences,以彻底防止警告:

const win = new electron.BrowserWindow({
    webPreferences: {
        allowEval: false // This is the key!
    }
});

字符串
一些背景信息:electron实际上会尝试执行一些JavaScript代码(从使用require('electron').executeJavaScript的字符串),如果成功,它会认为您的代码不安全。

相关问题