【问题标题】:Using Firebase Remote Config instead of .env file使用 Firebase 远程配置而不是 .env 文件
【发布时间】:2021-05-27 09:53:41
【问题描述】:

我正在构建一个带有 firebase 集成的 React 应用程序,并且可以通过在已部署网站中获取页面的页面源来检查我们正在使用的环境变量。

我有兴趣了解一些使它更安全的方法。我能想到的唯一方法是从 API 中获取值,以便它不会在任何时候与代码一起显示。

要连接到 Firebase,我可以使用 reserved url method to automatically connect.Firebase remote config 允许您存储键值对。我正在考虑将我所有的环境变量移出以删除配置设置并从那里使用它。所以我可以完全删除我的 .env 文件,避免暴露任何硬编码的值。

有人试过吗?使 .env 值更安全的推荐方法是什么?

【问题讨论】:

  • 通常我让后端处理所有敏感的 API 调用。例如,如果我想使用 API 密钥连接到一些安全服务,我会让我的后端进行调用,然后将响应返回给前端。由于您没有后端,您可以设置API restriction for your API keys。这意味着即使他们通过调试获得了您的 Firebase API 密钥,他们也无法做太多事情

标签: reactjs firebase environment-variables


【解决方案1】:

您不应该将任何您不希望用户能够访问的值加载到浏览器中,句号。浏览器是一本打开的书,虽然您可以通过更改加载位置和方式来隐藏值,但您无法阻止有动机的攻击者绝对阅读您在客户端上所做的任何事情。

这就是为什么 Firebase 设计为具有公开可读的安全 API 密钥和配置 - 当您编写安全规则时,您实际上是在围绕客户端可以执行的操作划定界限。

Firebase 远程配置可以而且应该用于客户端可以安全拥有的值,例如功能标志或 API 的环境特定 URL。它不应该用于敏感的东西,比如私有 API 密钥和秘密。

【讨论】:

  • 感谢您的建议。我们将如何处理您应用中的密钥。我们将把它保存在哪里以确保安全?在firebase中创建一个集合并将其存储在那里意味着每个登录的人都需要访问它。实时数据库呢?
  • 为此它取决于很多事情——密钥是什么?他们可以访问什么?谁需要在什么时候使用它们?您应该设计您的安全模型,以便任何不应该看到某个值的人永远不会在其客户端中获得该值。这可以通过多种不同的方式来实现。
  • 这些是用于连接到辅助 Firestore 数据库的配置值。具有足够权限的用户可以访问它们。访问由规则控制。但是连接的配置现在保留在我的 .env 文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多