内容安全策略 (CSP) 阻止 eval 方法调用

Content Security Policy (CSP) block eval method call

我正在使用 nicEditor,在 nicEditor 中有一个名为 eval 的方法被 CSP 阻止了。当我注释掉 CSP 代码时,它工作正常。

Error: call to eval() blocked by CSP     nicEdit.js:779:36

我的 CSP 代码:

scriptSrc: ["'self'", "'unsafe-inline'"]

我也看了https://developer.chrome.com/extensions/contentSecurityPolicy

提前致谢

如果您确实需要使用包含 evalnicEditor(一开始这可能不是一个好主意),您可以添加以下指令:'unsafe-eval'

我真的,真的,建议您使用不依赖于 eval 的不同编辑器。在大多数情况下,这确实存在安全风险。

如果您需要替代方案,请查看 ProseMirror 例如。

有问题的行在 nicEditorPaneladdButton 函数中(对我来说是第 682 行):

var type = (button['type']) ? eval('(typeof('+button['type']+') == "undefined") ? null : '+button['type']+';') : nicEditorButton;

将其替换为:

var type = (button['type']) ? (typeof(button['type']) == "undefined") ? null : window[button['type']] : nicEditorButton;

我刚刚 运行 解决了这个问题,制作了 Google Chrome 扩展。 Chrome 扩展加载器不允许我在 CSP 权限中使用 'unsafe-eval'。无论如何,如上所述,出于安全原因最好不要这样做。看一下代码,它看起来像是使用 eval() 来根据字符串的名称调用构造函数。

由于所有全局函数都是window对象的属性,所以我的更改以字符串形式(button['type'])调用构造函数的名称作为[=29=的属性 ] 而不是简单地评估它。