【问题标题】:Chrome extension unit test throws 'unsafe-eval' with SinonChrome 扩展单元测试用 Sinon 抛出“不安全评估”
【发布时间】:2016-06-08 08:34:50
【问题描述】:

我正在使用 mocha、chai 和 sinon 对我的 chrome 扩展进行单元测试。当我尝试从方法中存根对象时,我得到:

EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".

at createProxy (js/lib/sinon.js:2488:86)
at Function.create (js/lib/sinon.js:2549:29)
at Function.create (js/lib/sinon.js:3337:42)
at Object.stub (js/lib/sinon.js:3289:32)
at Context.<anonymous> (js/spec/sf-companion.spec.js:44:19)
at Test.Runnable.run (js/lib/mocha.js:4529:15)
at Runner.runTest (js/lib/mocha.js:4974:10)
at js/lib/mocha.js:5057:12
at next (js/lib/mocha.js:4899:14)
at js/lib/mocha.js:4909:7

test-runner.html:

http://pastebin.com/ij5kD2rY

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • chrome-extension://hjkmpahjllmdacbcennobnfcagfdaife/test/test-runner.html 是您 PC 上文件的本地链接。
  • @TomBurris 是的,是的。我怎样才能允许这个 URL?如果我打包这个,我将拥有相同的 url 和不同的扩展 ID。
  • 我建议复制test-runner.html 的内容并将其上传到pastebin.com 或类似网站,然后在此处分享该链接。
  • @TomBurris 这是网址pastebin.com/ij5kD2rY

标签: javascript unit-testing google-chrome-extension sinon sinon-chai


【解决方案1】:

为防止跨站点脚本,Google 已阻止 eval 功能。

要解决这个问题,将此代码添加到 manifest.json

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

作者:abhilash

可以找到here

【讨论】:

  • 但是如果正在运行扩展。但我正在使用 chrome-extension: url 和扩展资源对它的资源进行单元测试。如何允许 CSP 用于 chrome-extension: url's?
【解决方案2】:

using eval in Chrome extensions, safely 中,给出了以下策略限制:

必须将脚本移出到单独的 JavaScript 文件中,必须将内联事件处理程序转换为使用 addEventListener,并且禁用 eval()

在文档中也有说明,

eval 在扩展中很危险,因为它执行的代码可以访问扩展的高权限环境中的所有内容。

但是,由于许多库使用eval() 和类似 eval 的构造(例如 new Function() 来优化性能和简化表达,因此引入了沙盒作为一种安全机制来包含这些项目中的库而不影响安全性。

因此,在创建和使用沙盒时,请在清单中列出文件。每个应该在沙箱中运行的文件都必须通过添加沙箱属性在扩展清单中列出,如下所示:

{
  ...,
  "sandbox": {
     "pages": ["sandbox.html"]
  },
  ...
}

您可以阅读给定的示例文档并全面了解沙盒。

此外,GitHub 中的这个线程 - unsafe-eval security error in chrome extension 也可能会有所帮助,其中提到这已经是一个已解决的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多