【问题标题】:Electron + MySQL throws security warningElectron + MySQL 引发安全警告
【发布时间】:2020-09-09 07:23:08
【问题描述】:

我已经安装了 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
    }
  });

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

电子安全警告 (Insecure Content-Security-Policy) 这个渲染器进程要么没有内容安全 策略集或启用了“unsafe-eval”的策略。这暴露了用户 这个应用程序带来了不必要的安全风险。

我怎样才能绕过它?

【问题讨论】:

    标签: mysql security electron warnings


    【解决方案1】:

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

    但是,如果您不能使用某些变通方法(例如,使用 preload 脚本;请参阅 Electron 文档,特别是 this tutorial on context isolation),以消除警告(这确实不会造成任何伤害,因为打包应用时不会显示),您可以像这样在主进程中设置环境变量(最好在第一行):

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        相关资源
        最近更新 更多