我的 Firebase Web 应用程序正在与与此问题相关的两个网址进行通信:
出于 Firebase 服务范围之外的安全原因,我将 CSP 标头放入我的应用中 (content=frame-src)。
我将
https://[MY_ID].firebaseapp.com/
(第一个 URL)列入白名单,因为需要它进行身份验证。此外,相同的网址位于我的前端配置中,因此我觉得将它放在那里是安全的,并且不会暴露任何秘密(如果这有意义的话......)。
但是在测试我的应用程序时,每隔一段时间我就会收到有关第二个 URL 的以下错误:
拒绝构建“https://[OTHER_ID].firebaseio.com/”,因为它 违反以下内容安全政策指令: “[MY_CSP_DIRECTIVE]”。
我的问题是:
总体来说:
行动:
https://*.firebaseio.com/
列入白名单是否安全?或者这是否会打开与其他(可能是恶意的)Firebase 用户的随机后端的通信? https://[OTHER_ID].firebaseio.com/
那样指定我的ID吗?或者我是否会暴露一个我不应该以任何方式暴露的ID?我承认我自己对 Firebase 并不熟悉,但我了解与 CSP 相关的所有方面。
使用通配符将 https://*.firebaseio.com/ 列入白名单是否安全?或者这是否会打开与其他(可能是恶意的)Firebase 用户的随机后端的通信?
如果每个用户都获得一个子域,那么是的,您将所有子域列入白名单,以便任何人的 firebase 代码都可以执行。
更一般地说,您希望 CSP 尽可能具体,而又不会造成问题。一般来说,细化到子域就足够具体了,尽管您甚至可以细化到特定目录甚至文件(如果您选择)。通常不建议将所有子域列入白名单。即使某个网站“当前”没有在另一个子域上提供危险资源,他们也可以随时添加一个。 并且您不会通过 CSP 中的白名单暴露用户不知道的任何内容。他们将从“来源”选项卡中了解该域。如果您不希望用户看到直接来源,则必须使用代理。
如果它不影响您的应用程序,我仍然希望以某种方式解决该问题,否则它会在浏览器控制台中留下一条可怕的消息(大多数用户不会看到),并且会使以后实现
report-uri
变得很痛苦来自所有误报。使用 io 域修复
child-src
并找出它的作用,如果它不是您需要的东西,我会看看您是否可以删除它。以下是文档中的相关信息:
根据数据库的位置,新数据库的 URL 将采用以下形式之一:
DATABASE_NAME.firebaseio.com(
us-central1 中的数据库) DATABASE_NAME.REGION.firebasedatabase.app(
适用于所有其他位置的数据库)