提问人:Jens Törnell 提问时间:5/22/2020 更新时间:6/10/2020 访问量:263
Electron + MySQL 抛出安全警告
Electron + MySQL throws security warning
问:
我已经安装了 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”的策略。这会暴露以下用户 此应用程序会带来不必要的安全隐患。
我怎样才能绕过它?
答:
你在这里体验的是 Electron 开箱即用的沙盒。这可以防止执行用户界面 HTML 和 JavaScript 的渲染器进程能够访问 NodeJS API,因此任何恶意代码都不会对用户的计算机造成实际损害。正如您所说,您可以通过设置 来禁用此自动沙盒,这会产生此安全警告,但 Electron 开发人员并不认为这是一个好的做法。nodeIntegration: true
但是,如果你不能使用一些解决方法(例如,通过使用脚本;参考 Electron 文档,特别是这个关于上下文隔离的教程),来摆脱警告(这实际上不会造成任何伤害,因为它不会在应用程序打包时显示),你可以在主进程中设置一个环境变量,如下所示(最好在第一行):preload
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true;
// Other main process code...
虽然这会删除警告,但我会把它留在原处,这样它就可以提醒你你的安全职责,并在应用程序达到生产就绪状态后重新访问你的代码,使其符合 Electron 的安全准则。
请改用预加载脚本,并将 MySQL 连接代码放入其中。预加载脚本可以访问要求/节点集成,也可以同时访问内容窗口。您可以将预加载脚本添加到全局窗口对象中,以公开用于连接和执行 sql 查询的函数。
上一个:MySQL, 修改主键列
下一个:创建MySQL表并加载数据
评论