将Electron项目更新到最新版本后,为什么会看到"电子安全警告"?

Un1*_*Un1 27 node.js electron vuetify.js

我从这个Vuetify的样板创建了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
Run Code Online (Sandbox Code Playgroud)

题:

可能的原因是什么 - Node,Vue.js,webpack的localhost配置?我该怎么办?

ant*_*rek 23

你有这个:

电子安全警告此渲染器进程启用了Node.js集成并尝试加载远程内容.这会使此应用的用户面临严重的安全风险.

因为来自电子文档的第二个安全建议

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')
Run Code Online (Sandbox Code Playgroud)
<!-- Bad -->
<webview nodeIntegration src="page.html"></webview>

<!-- Good -->
<webview src="page.html"></webview>
Run Code Online (Sandbox Code Playgroud)

禁用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
}
Run Code Online (Sandbox Code Playgroud)

因此,您已收到警告,以便您可以禁用Node.js集成远程内容.

我希望这有助于回答你的问题.

  • 谢谢你的解释。不幸的是,这没有帮助。我在mainWindow的webPreferences中添加了nodeIntegration:false,但是现在我看到了2 Uncaught ReferenceError:未定义模块,它们指向index.js中的标签&lt;link&gt;。文件和“ renderer.js”文件(我想应该是加载模块的webpack文件) (4认同)
  • @ JimmyBreck-McKye在最后一次`electron-vue`样板更新后,每个人都看到了这个警告 (4认同)
  • 当我将鼠标悬停在 `renderer.js` 错误上时,我可以看到它指向 `http://localhost:9080/renderer.js`,也许 webpack 在开发模式下正在做一些电子不喜欢的事情。mainWindow 将此加载为 url: **const winURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080` : `file://${__dirname}/index.html`** 所以也许 Electron 不喜欢 localhost 地址,认为它会加载一些外部网站? (2认同)
  • @ Un1是的,我昨天下午的某个时候放弃了那个样板.在我们发言时,我实际上正在编写自己的文章,试图解决这些问题.据我所知,问题是如果电子从webpack-dev-server运行,window.location.protocol不是'file'会让Electron抛出错误. (2认同)

net*_*der 22

将以下行添加到main.js:

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

但是,您应该阅读安全性,本机功能和您的责任, 以充分理解这样做的含义.

  • 是的,我补充说,但这不是主要问题.我试图找出**为什么**Chrome会在新创建的Electron项目中显示那些可怕的警告.关于这个问题,Github有2个问题,但仍然没有关于如何解决这些"安全问题"的信息 (4认同)
  • @netlander您可以对此进行扩展吗?我只使用相对路径,并且收到警告。我也有`nodeIntegration:true`但我需要。 (2认同)

Adr*_*ith 7

添加

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
Run Code Online (Sandbox Code Playgroud)

像这样,错误消息就会消失。

在此输入图像描述


li *_*i x 5

较新版本的电子 Vue 模板具有这些警告,这些警告以前在测试版中使用以下方法禁用:

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
Run Code Online (Sandbox Code Playgroud)

现在需要您在您的index.js.

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1';
Run Code Online (Sandbox Code Playgroud)


Tom*_*uer 5

Electron 安全清单列出了如何处理安全警告。特别是,index.htmlfile:协议(不能使用HTTP CSP标头)提供服务时,可以将meta标记用于相同的目的,如此处的安全性清单中所述:CSP HTTP标头

建议使用

<meta http-equiv="Content-Security-Policy" content="default-src 'none'" />
Run Code Online (Sandbox Code Playgroud)

......但我发现(在GitHub上得到帮助这里)这一个更加实用,因为它允许使用script src

<meta http-equiv="Content-Security-Policy" content="script-src 'self';" />
Run Code Online (Sandbox Code Playgroud)

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