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)
我读过它很危险,不推荐?这样做时我也会收到警告。
电子安全警告(不安全的内容安全策略)此渲染器进程没有设置内容安全策略或启用了“不安全评估”的策略。这使此应用程序的用户面临不必要的安全风险。
我怎样才能绕过它?
您在这里体验的是 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 的安全准则。