Firebase Web-App 指南指出我应该将给定的内容apiKey放在我的 Html 中以初始化 Firebase:
apiKey
// 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每个访问者都可以看到它。
该密钥 的目的是什么,它真的 是公开的 吗?
此apiKey配置片段中的 仅标识您在 Google 服务器上的 Firebase 项目。有人知道它不是安全风险。事实上,他们有必要知道它,以便他们与您的 Firebase 项目进行交互。每个使用 Firebase 作为后端的 iOS 和 Android 应用程序也包含相同的配置数据。
从这个意义上说,它与在同一片段中标识与您的项目关联的后端数据库的数据库 URL 非常相似:https://<app- id>.firebaseio.com. 请参阅此问题,了解为什么这不是安全风险:如何限制 Firebase 数据修改,包括使用 Firebase 的服务器端安全规则来确保只有授权用户才能访问后端服务。
https://<app- id>.firebaseio.com
如果您想了解如何确保对 Firebase 后端服务的所有数据访问都获得授权,请阅读有关Firebase 安全规则的文档。这些规则控制对文件存储和数据库的访问,并在 Firebase 服务器上强制执行。所以不管是 你的 代码,还是其他人的代码使用你的配置数据,它只能做安全规则允许它做的事情。
有关 Firebase 将这些值用于什么用途以及您可以 为其中哪些设置配额的其他说明,请参阅 Firebase 文档关于使用和管理 API 密钥
如果您想降低将此配置数据提交给版本控制的风险,请考虑使用Firebase Hosting 的 SDK 自动配置。虽然密钥仍会以相同的格式出现在浏览器中,但它们不会再被硬编码到您的代码中。
更新 (2021 年 5 月):借助名为Firebase App Check的新功能,现在实际上可以将对 Firebase 项目中后端服务的访问限制为仅来自在该特定项目中注册的 iOS、Android 和 Web 应用程序的访问.
您通常希望将其与上述基于用户身份验证的安全性结合起来,这样您就可以对使用您的应用程序的滥用用户提供另一个 保护 。
通过将 App Check 与安全规则相结合,您既可以防止滥用,又可以很好地控制每个用户可以访问的数据,同时仍然允许从客户端应用程序代码直接访问数据库。