向公众公开Firebase apiKey是否安全?

火力web应用指南规定我应该把给定的apiKey在我的HTML火力点初始化:

// TODO: Replace with your project's customized code snippet
<script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script>
<script>
  // Initialize Firebase
  var config = {
    apiKey: '<your-api-key>',
    authDomain: '<your-auth-domain>',
    databaseURL: '<your-database-url>',
    storageBucket: '<your-storage-bucket>'
  };
  firebase.initializeApp(config);
</script>

这样,apiKey便暴露给每个访问者。该密钥的目的是什么,真的意味着要公开吗?

达蒙2020/04/03 11:18:38

我不相信将安全性/配置密钥公开给客户端。我不会说它是安全的,不是因为有人可以从第一天起就窃取所有私人信息,因为有人会提出过多请求,耗尽您的配额,并使您欠Google很多钱。

您需要考虑许多概念,包括限制人们不要访问不应在的地方,DOS攻击等。

我更希望客户端首先连接到您的Web服务器,在那里您将第一手防火墙,验证码,cloudflare,自定义安全性放在客户端和服务器之间,或者服务器和firebase之间,您就可以使用了。至少您可以先停止可疑活动,直到其到达火力基地。您将拥有更大的灵活性。

我只看到一种很好的使用场景,可以将基于客户端的配置用于内部使用。例如,您具有内部域,并且您可以肯定外部人员无法访问该域,因此可以设置浏览器-> firebase类型之类的环境。

斯丁2020/04/03 11:18:38

apiKey实际上只是在Google服务器上标识您的Firebase项目。知道它不是安全风险。实际上,他们有必要知道它,以便他们与Firebase项目进行交互。

从这个意义上讲,它与Firebase过去用于标识后端的数据库URL非常相似:https://<app-id>.firebaseio.com有关为何这不构成安全风险的问题,请参见以下问题:如何限制Firebase数据修改?,包括使用Firebase的服务器端安全规则,以确保只有授权用户才能访问后端服务。

如果您想了解如何保护对Firebase后端服务的所有数据访问均得到授权,请阅读有关Firebase安全规则的文档