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

标签 javascript firebase

Firebase Web-App guide声明我应该将给定的 apiKey 放入我的 Html 中以初始化 Firebase:

// 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 会向每个访问者公开。

该 key 的用途是什么?它真的应该公开吗?

最佳答案

apiKey在此配置片段中仅标识 Google 服务器上的 Firebase 项目。某人知道它不会构成安全风险。事实上,他们有必要了解这一点,以便与您的 Firebase 项目进行交互。每个使用 Firebase 作为后端的 iOS 和 Android 应用中也包含相同的配置数据。

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

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

有关 Firebase 使用这些值的用途以及您可以为其中哪些值设置配额的其他说明,请参阅 using and managing API keys 上的 Firebase 文档.

<小时/>

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

<小时/>

更新(2021 年 5 月):感谢名为 Firebase App Check 的新功能,现在实际上可以将对 Firebase 项目中的后端服务的访问限制为仅来自在该特定项目中注册的 iOS、Android 和 Web 应用的访问。

您通常希望将其与上述基于用户身份验证的安全性结合起来,这样您就有了另一个屏障,可以防止滥用您的应用的用户。

通过将 App Check 与安全规则相结合,您不仅可以广泛地防止滥用,还可以精细地控制每个用户可以访问的数据,同时仍然允许从客户端应用程序代码直接访问数据库。

关于javascript - 向公众公开 Firebase apiKey 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61586486/

相关文章:

javascript - 需要只允许有效页码的正则表达式,例如 1、2、3、4-5,每个页码的最大长度为 3 位数字 (1-999)

javascript - 如何在 div 顶部制作水平滚动条 通过 ajax 加载内容后工作

javascript - 我的 ng-include 不起作用

javascript - firebase auth - 获取当前提供者 javascript

android - android 中如何管理多个用户

ios - 在 xcode 中设置 Firebase 时出现问题

javascript - JavaScript 中字符串与整数之间的比较是如何进行的?

php - 是否可以在 If 语句中包含 Php 变量或 JavaScript 中的 URL?

javascript - TypeError : _app2. default.database 不是函数。 (在 '_app2.default.database()' 中, '_app2.default.database' 未定义)

java - 使用 LocalDate 从 Firestore 查询两个日期之间的数据