公开firebase apiKey

时间:2019-06-12 09:03:37

标签: firebase firebase-security

firebase https://firebase.google.com/docs/web/setup的文档告诉我们我们可以安全地公开firebase apiKey:

  

注意:Firebase配置对象包含唯一但非秘密的   您的Firebase项目的标识符。

本教程介绍了如何获取apiKey并将其插入到我们的Web应用程序的HTML代码中。每个人都可以阅读该密钥。我会理解这只是一个识别码。

但是最近我收到了来自Google的此消息:

  

我们检测到一个与   以下Google Cloud Platform项目:

     

[...]

     

在以下URL上找到密钥:

     

[...]

     

我们认为您或您的组织可能无意中   在公共资源或公共网站上发布了受影响的API密钥   (例如,凭据错误地上传到了诸如   GitHub。)

     

请注意,作为项目/帐户所有者,您有责任   保护您的钥匙。因此,我们建议您服用   请采取以下步骤来纠正这种情况:

     
      
  1. 如果此密钥旨在公开使用(或如果可公开访问   密钥是无法避免的):       登录到Google Cloud Console并查看API和   您帐户的结算活动,确保其用法符合   您所期望的。       在适用的API密钥中添加API密钥限制。
  2.   
  3. 如果该密钥不是公开的:       重新生成受到破坏的API密钥:在中搜索凭据   云控制台平台,编辑泄漏的密钥,然后使用   重新生成密钥按钮以旋转密钥。有关更多详细信息,请查看   有关处理受到破坏的GCP凭据的说明。       立即采取措施,确保您的API密钥未嵌入公共源代码系统中,并以下载方式存储   目录,或无意间以其他方式共享。       在适用的API密钥中添加API密钥限制。
  4.   

总的来说,我会说两种信息来源彼此相反。 apiKey是否为“非秘密”?我也不确定如何阅读相关问题Is it safe to expose Firebase apiKey to the public?。我了解如果规则允许,apiKey足以访问整个数据库。

第一个问题:我想知道是否可以确定apiKey只提供对数据库的访问(可以受规则限制),还是可以访问有关该项目的其他信息。那存储呢?用户可以读取文件吗?可以写吗?该密钥称为“ Web API密钥”,因此我知道是项目的唯一标识符。在收到来自Google的消息之前,我已经将其更多地视为标识符而不是密钥。由于对项目API的每次访问对我(项目所有者)来说都是潜在的成本,因此我了解为计费目的需要密钥。

第二个问题。由于我想完全控制哪些用户可以访问数据库,因此我的应用程序提出了REST api作为数据库的接口(使用函数)。因此,用户不应直接访问数据库。我有以下规则

service cloud.firestore {
  match /databases/{database}/documents {
    match /global/public {
      allow read;
    }
  }
}

目的是用户只能阅读以/ global / public为前缀的文档(当前为空)。所以我认为数据库是安全的。现在,我想知道是否真的需要公开apiKey ...用户身份验证是否需要apiKey?如果是这样,我可以忽略来自Google的消息并让apiKey公开吗?

0 个答案:

没有答案