电子+MySQL引发安全警告

问题描述 投票:0回答:1

我已经安装了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 Uncaught ReferenceError: require is not defined.

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

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

我读过这很危险,不建议这么做?当我这样做的时候,我也得到了一个警告。

Electron Security Warning (Insecure Content-Security-Policy) 这个渲染器进程要么没有设置内容安全策略,要么是启用了 "unsafe-eval "的策略。这将使该应用程序的用户面临不必要的安全风险。

我怎样才能解决这个问题?

mysql security electron warnings
1个回答
1
投票

你在这里遇到的是Electron的开箱即用的沙盒。这可以防止你的渲染器进程,也就是执行你的用户界面HTML和JavaScript的地方,能够访问NodeJS的API,这样就不会有恶意代码真正对用户的电脑造成伤害。正如您所说,您可以通过设置 nodeIntegration: true但Electron的开发者认为这不是一个好的做法。

然而,如果你不能使用一些变通的方法(例如使用 preload 脚本;请参考Electron文档,特别是关于 本教程关于上下文隔离),为了消除这个警告(其实并没有什么坏处,因为它不会在应用程序打包时显示),你可以在你的主进程中设置一个环境变量,就像这样(最好是在第一行)。

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

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


1
投票

使用一个预加载脚本来代替,并把你的MySQL连接代码放在里面。预加载脚本可以访问要求节点集成,也可以同时访问内容窗口。你可以让预加载脚本添加到全局窗口对象中,暴露出连接和执行sql查询的功能。

© www.soinside.com 2019 - 2024. All rights reserved.