Electron + MySQL 抛出安全警告

Jen*_*ell 7 mysql security warnings electron

我已经安装了 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>
Run Code Online (Sandbox Code Playgroud)

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

index.html:16 Uncaught ReferenceError: require 未定义

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

win = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true
    }
  });
Run Code Online (Sandbox Code Playgroud)

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

电子安全警告(不安全的内容安全策略)此渲染器进程没有设置内容安全策略或启用了“不安全评估”的策略。这使此应用程序的用户面临不必要的安全风险。

我怎样才能绕过它?

Ale*_*ner 1

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

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

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true;
// Other main process code...
Run Code Online (Sandbox Code Playgroud)

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