【问题标题】:Firebase + Chrome content security policy settings?Firebase + Chrome 内容安全策略设置?
【发布时间】:2012-12-22 22:27:39
【问题描述】:

我正在尝试在 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 团队(或任何人)是否可以提供任何解决方法或建议,或者解释为什么内联执行脚本?

【问题讨论】:

  • 啊,我知道我不是唯一一个。是的,问题是 Firebase 构造函数正在做一些时髦的魔法(console.log a new Firebase(URL) 看看我的意思。
  • 遗憾的是在内容方面也没有成功 - d.pr/i/pRMz

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


【解决方案1】:

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

【讨论】:

  • 我仍然收到以下信息:Refused to load the script 'https://auth.firebase.com... 但将https://auth.firebase.com 添加到 CPS 似乎可以解决问题。
  • 我已经找了几个星期来解决这个问题,我忘了添加 cdn.firebase.com,很奇怪,因为我的源代码中没有看到对它的引用
【解决方案2】:

我也有类似的问题;你看,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'; " 之后会产生奇迹。

【讨论】:

    【解决方案3】:

    我有一个 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';
    
      " />
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2019-05-25
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2019-04-06
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多