7

我正在尝试在 Chrome 扩展背景页面中使用 Firebase,但它看起来正在执行内联脚本,由于安全问题,这是不允许的。

我目前已将 CSP 设置为:

{"content_security_policy": 
  "script-src 'self' https://cdn.firebase.com https://<my-subdomain>.firebaseio.com; object-src 'self'"}

我能够加载初始 Firebase 脚本,但在调用 new Firebase('my-firebase-url') 时,出现以下错误:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“。未捕获的 ReferenceError:未定义 pRTLPCB

Firebase 团队(或任何人)是否可以提供任何解决方法或建议,或者解释为什么内联执行脚本?

4

3 回答 3

13

在提出问题时,有一个错误阻止 Firebase 在 Chrome 扩展中工作,但现在已经修复。

正确的 CSP 是:

"content_security_policy": "script-src 'self' https://cdn.firebase.com https://*.firebaseio.com; object-src 'self'"

(请注意,域中的通配符很重要,因为 Firebase 可能会在内部连接到其他子域。)

有关使用 Firebase 的示例 chrome 扩展,请参阅:https ://github.com/firebase/firebase-chrome-extension 。

于 2012-12-23T04:19:02.000 回答
3

我有类似的问题;您会看到,Firebase 的构造函数似乎执行了一些 dom 操作以执行一些脚本(模糊,我知道),这会触发 Chrome CSP,因为您不应该这样做。

我什至试图通过Sandbox Pages包装构造函数,但没有成功(我得到一个 DOM ERR 18,即使我的清单具有所有权限)。如果您尝试在页面操作/浏览器操作的背景页面或弹出页面中执行此操作,也会发生同样的情况。

选择?您可以将 Firebase 作为内容脚本注入(从清单中执行),并通过消息传递将回调作为 Chrome.extension.sendMessage 发送。我现在正在这样做,所以我可以告诉你到目前为止,至少 Firebase 构造函数是如何工作的。

解决方案?James Tampling 阅读并提示 Firebase 团队在此之后查找 :)

更新:将 Firebase.js 作为内容脚本注入也不起作用,但好消息是 Firebase 团队(联系 Andrew Lee)正在检查它。

更新 2 Firebase 团队修复了它,现在它可以从弹出页面(在浏览器弹出窗口或页面操作之一中)工作。您需要在 manifest.json 中添加以下 CSP,但"content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.firebase.com https://*.firebaseio.com https://*.firebaseio.com; object-src 'self'; "之后它会产生奇迹。

于 2012-12-22T23:41:56.577 回答
1

我有一个 cordova js 应用程序,只有以下一个有效:

<meta http-equiv="Content-Security-Policy" content="

  default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval';
  script-src  'self' https://www.gstatic.com https://cdn.firebase.com https://*.firebaseio.com; object-src 'self';

  " />

希望这可以帮助。

于 2019-03-10T07:32:01.193 回答