内容安全策略 (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
提前致谢
如果您确实需要使用包含 eval
的 nicEditor
(一开始这可能不是一个好主意),您可以添加以下指令:'unsafe-eval'
我真的,真的,建议您使用不依赖于 eval
的不同编辑器。在大多数情况下,这确实存在安全风险。
如果您需要替代方案,请查看 ProseMirror 例如。
有问题的行在 nicEditorPanel
的 addButton
函数中(对我来说是第 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=的属性 ] 而不是简单地评估它。
我正在使用 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
提前致谢
如果您确实需要使用包含 eval
的 nicEditor
(一开始这可能不是一个好主意),您可以添加以下指令:'unsafe-eval'
我真的,真的,建议您使用不依赖于 eval
的不同编辑器。在大多数情况下,这确实存在安全风险。
如果您需要替代方案,请查看 ProseMirror 例如。
有问题的行在 nicEditorPanel
的 addButton
函数中(对我来说是第 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=的属性 ] 而不是简单地评估它。