如何解决在 Electron 中设置 CSP 元标记时,“您网站的内容安全策略阻止在 JavaScript 中使用‘eval’”警告 main.jsindex.html
我正在创建一个 Electron 应用程序,并且根据 Electron security tutorial 我添加了一个 CSP 元标记。在运行应用程序时,这个问题出现在 devtools 中。
您网站的内容安全政策禁止在 JavaScript 中使用“eval”
内容安全策略 (CSP) 可防止将任意字符串评估为 JavaScript,从而使攻击者更难在您的网站上注入未经授权的代码。
要解决此问题,请避免使用 eval()
、new Function()
、setTimeout([string],...)
和 setInterval([string],...)
来评估字符串。
我自己的代码中不存在 eval
调用或其他字符串评估情况。该问题没有提供任何关于导致该问题的代码的线索,我尝试使用 'report-sample'
值对输出没有影响。在 Chrome 中打开 HTML 文件时不会出现此问题。
我可以用一个非常基本的应用程序重新创建警告。
main.js
const path = require("path");
const { app,BrowserWindow } = require("electron");
const createWindow = () => {
let mainWindow = new BrowserWindow({
width: 800,height: 600,webPreferences: {
contextIsolation: true,nodeIntegration: false,}
});
mainWindow.loadURL(`file://${path.join(__dirname,"/index.html")}`);
};
app.on("ready",createWindow);
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
<title>Document</title>
</head>
<body>
<h1>CSP Issue Test</h1>
</body>
</html>
我想了解为什么会出现此问题并解决它,而不是仅仅抑制警告。
解决方法
从第 5 版开始,nodeIntegration 的默认值从 true 更改为 false。您可以在创建浏览器窗口时启用它:
app.on('ready',() => {
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,contextIsolation: false,}
});
});
并从 html 中删除此内容
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。