Electron + MySQL 抛出安全警告

Electron + MySQL throws security warning

提问人:Jens Törnell 提问时间:5/22/2020 更新时间:6/10/2020 访问量:263

问:

我已经安装了 Electron 和 MySql 并让它们很好地协同工作。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <h1>Hello world</h1>
</body>


<script>
  var mysql = require('mysql');
  var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'blog'
  });

  connection.connect();

  connection.query('SELECT * FROM posts', function (error, results, fields) {
    if (error) throw error;
    console.log(results);
  });

  connection.end();
</script>

</html>

然后在窗口中,我收到一个安全错误。

index.html:16 未捕获的引用错误:未定义要求

我注意到我可以像下面这样覆盖它。

win = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true
    }
  });

我读过它很危险,不推荐?这样做时,我也会收到警告。

Electron 安全警告 (Insecure Content-Security-Policy) 此渲染器进程没有内容安全性 策略集或启用了“unsafe-eval”的策略。这会暴露以下用户 此应用程序会带来不必要的安全隐患。

我怎样才能绕过它?

MySQL Security Electron 警告

评论


答:

1赞 Alexander Leithner 5/23/2020 #1

你在这里体验的是 Electron 开箱即用的沙盒。这可以防止执行用户界面 HTML 和 JavaScript 的渲染器进程能够访问 NodeJS API,因此任何恶意代码都不会对用户的计算机造成实际损害。正如您所说,您可以通过设置 来禁用此自动沙盒,这会产生此安全警告,但 Electron 开发人员并不认为这是一个好的做法。nodeIntegration: true

但是,如果你不能使用一些解决方法(例如,通过使用脚本;参考 Electron 文档,特别是这个关于上下文隔离的教程),来摆脱警告(这实际上不会造成任何伤害,因为它不会在应用程序打包时显示),你可以在主进程中设置一个环境变量,如下所示(最好在第一行):preload

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true;
// Other main process code...

虽然这会删除警告,但我会把它留在原处,这样它就可以提醒你你的安全职责,并在应用程序达到生产就绪状态后重新访问你的代码,使其符合 Electron 的安全准则。

1赞 ibash 6/10/2020 #2

请改用预加载脚本,并将 MySQL 连接代码放入其中。预加载脚本可以访问要求/节点集成,也可以同时访问内容窗口。您可以将预加载脚本添加到全局窗口对象中,以公开用于连接和执行 sql 查询的函数。