在 Electron 中设置 CSP 元标记时,“您网站的内容安全策略阻止在 JavaScript 中使用‘eval’”警告

Jac*_*kel 11 javascript google-chrome-devtools content-security-policy electron

我正在创建一个 Electron 应用程序,并且根据Electron 安全教程,我添加了一个 CSP 元标记。运行应用程序时,这个问题出现在 devtools 中。

您站点

的内容安全策略阻止在 JavaScript 中使用“eval”内容安全策略 (CSP) 可防止将任意字符串评估为 JavaScript,从而使攻击者更难在您的站点上注入未经授​​权的代码。

为了解决这个问题,应避免使用eval()new Function()setTimeout([string], ...)setInterval([string], ...)评估字符串。

eval来电或字符串评估的其他情况下,存在于我自己的代码。该问题没有提供任何关于导致它的代码的线索,我尝试使用该'report-sample'值对输出没有影响。在 Chrome 中打开 HTML 文件时不会出现此问题。

我可以用一个非常基本的应用程序重新创建警告。

主文件

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);
Run Code Online (Sandbox Code Playgroud)

索引.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>
Run Code Online (Sandbox Code Playgroud)

我想了解为什么会出现此问题并解决它,而不仅仅是抑制警告。

Sag*_*r M -2

从版本 5 开始,nodeIntegration 的默认值从 true 更改为 false。您可以在创建浏览器窗口时启用它:

   app.on('ready', () => {
    mainWindow = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

并从 html 中删除它

<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
Run Code Online (Sandbox Code Playgroud)

  • 这可能非常危险,并且无法解决当前的问题 - 禁用“nodeIntegration”并启用“contextIsolation”是提高电子应用程序安全性的有用步骤。 (4认同)
  • 但是,此警告与“nodeIntegration”无关。如果您不运行任何不安全的脚本(假设您相信自己不会编写错误:D),那么节点集成仍然是安全的,但无论如何这不是重点。OP 没有“eval”并且选择了安全功能,为什么这被视为“问题”?它只会增加安全性;也许我对“问题”的理解错误? (4认同)