Firebase + Chrome内容安全策略设置?

时间:2012-12-22 22:27:40

标签: google-chrome-extension firebase content-security-policy

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

我目前将CSP设置为:

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

我可以加载初始的Firebase脚本,但在调用新的Firebase('my-firebase-url')时,我收到以下错误:

  

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

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

3 个答案:

答案 0 :(得分:8)

在提出问题时,有一个错误阻止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

答案 1 :(得分:3)

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

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

替代?您可以将Firebase注入内容脚本(从清单中执行),然后通过Message Passing将回调发送为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'; "之后会产生奇迹。

答案 2 :(得分: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';

  " />

希望这会有所帮助。