我应该在Html中输入给定的apiKey来初始化Firebase的Firebase Web-App guide个状态:

// 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.

purpose of that key是什么?它真的是meant to be public吗?

推荐答案

这个配置片段中的apiKey只标识了你在谷歌服务器上的Firebase项目.这不是一个安全风险的人知道它.事实上,他们有必要了解这一点,以便与您的Firebase项目互动.同样的配置数据也包含在每个使用Firebase作为后端的iOS和Android应用程序中.

从这个意义上说,它非常类似于在相同的代码片段https://<app-id>.firebaseio.com中标识与您的项目相关联的后端数据库的数据库URL.有关为什么这不是安全风险的问题,请参阅这个问题:How to restrict Firebase data modification?,包括使用Firebase的服务器端安全规则来确保只有授权用户才能访问后端服务.

如果您想了解如何确保对Firebase后端服务的所有数据访问都得到授权,请阅读Firebase security rules上的文档.这些规则控制对文件存储的访问和对数据库的访问,并在Firebase服务器上强制实施.因此,无论是your代码,还是使用您的配置数据的其他人的代码,它都只能做安全规则允许它做的事情.

有关Firebase使用这些值的原因,以及您为其中哪些设置了配额的另一种解释,请参阅using and managing API keys上的Firebase文档.


如果您想减少将此配置数据提交到版本控制的风险,请考虑使用SDK auto-configuration of Firebase Hosting.虽然这些密钥最终仍将以相同的格式出现在浏览器中,但它们将不再被硬编码到您的代码中.


Update(2021年5月):多亏了名为Firebase App Check的新功能,现在实际上可以将Firebase项目中后端服务的访问权限限制为仅来自特定项目中注册的iOS、Android和Web应用程序的访问权限.

你通常会希望将其与上面描述的基于用户身份验证的安全性结合起来,这样你就有了另一个屏障,可以抵御使用你的应用程序的恶意用户.

通过将App Check与安全规则相结合,您可以获得广泛的防止滥用的保护,并获得对每个用户可以访问的数据的控制,同时仍然允许从您的客户端应用程序代码直接访问数据库.

Javascript相关问答推荐

如何使用JavaScript向html元素添加样式

想要检测字符串中的所有单词

如何使用CSS和JavaScript创建粘性、凝聚力的形状到形状(容器)变形?

Angular:ng-contract未显示

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

React存档iframe点击行为

每次子路由重定向都会调用父加载器函数

. NET中Unix时间转换为日期时间的奇怪行为

使搜索栏更改语言

如何禁用附加图标点击的v—自动完成事件

如何调用名称在字符串中的实例方法?

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

如何在输入元素中附加一个属性为checkbox?

expo 联系人:如果联系人的状态被拒绝,则请求访问联系人的权限

使用Document.Evaluate() Select 一个包含撇号的HTML元素

本地损坏的Java脚本

使用可配置项目创建网格

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

TabNavigator和StackNavigator之间的Reaction Native中的导航问题

将以前缓存的 Select 器与querySelector()一起使用