当前位置: 首页 > 知识库问答 >
问题:

向公众公开Firebase apiKey安全吗?

周意智
2023-03-14

Firebase Web-App指南指出,我应该将给定的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就会公开给每个访问者。那把钥匙的用途是什么,它真的是要公开的吗?

共有2个答案

蒲功
2023-03-14

在prufrofro和Frank van Puffelen的答案的基础上,我建立了这个设置,它不会阻止刮擦,但会使API密钥的使用稍微困难一些。

警告:要获取数据,即使使用这种方法,也可以简单地打开Chrome中的JS控制台,然后键入:

firebase.database().ref("/get/all/the/data").once("value", function (data) {
    console.log(data.val());
});

只有数据库安全规则可以保护您的数据。

尽管如此,我将我的生产API密钥使用限制为我的域名,如下所示:

  1. https://console.developers.google.com/apis
  2. 选择您的Firebase项目
  3. 凭据
  4. 在API键下,选择浏览器键。它看起来应该是这样的:“浏览器键(由Google服务自动创建)”
  5. 在“接受来自这些HTTP引用者(网站)的请求”中,添加应用程序的URL(示例:projectname.firebaseapp.com/*)

现在应用程序只会在这个特定的域名上工作。因此,我创建了另一个API密钥,它将是本地主机开发的私有密钥。

  1. 单击“创建凭据”>API密钥

缺省情况下,正如Emmanuel Campos所提到的,Firebase只将localhost和您的Firebase托管域作为白名单。

为了确保我不会错误地发布错误的API键,我使用以下方法之一在生产中自动使用限制较多的一个。

Create-React-App的设置

/env.development中:

REACT_APP_API_KEY=###dev-key###

/env.production中:

REACT_APP_API_KEY=###public-key###

/src/index.js

const firebaseConfig = {
  apiKey: process.env.REACT_APP_API_KEY,
  // ... 
};
黎鹤轩
2023-03-14

这个配置片段中的apiKey只是标识Google服务器上的Firebase项目。有人知道并不是安全风险。事实上,让他们知道它是必要的,这样他们才能与您的Firebase项目进行交互。同样的配置数据也包含在每个使用Firebase作为后端的iOS和Android应用中。

从这个意义上说,它非常类似于数据库URL,该数据库URL标识了与项目相关联的后端数据库,在相同的代码片段中:https:// .firebaseio.com 。请参阅关于为什么这不是安全风险的问题:如何限制Firebase数据修改?,包括使用Firebase的服务器端安全规则,以确保只有授权用户才能访问后端服务。

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

有关Firebase使用这些值的另一个解释,以及您可以为其中哪些值设置配额,请参阅Firebase关于使用和管理API键的文档。

如果希望降低将此配置数据提交到版本控制的风险,请考虑使用Firebase宿主的SDK自动配置。虽然这些键仍然会以相同的格式出现在浏览器中,但它们不会再硬编码到您的代码中。

 类似资料:
  • 问题内容: 在web应用指南规定我应该把给定的在我的HTML初始化火力地堡: 这样一来,每个访问者都可以接触到。该密钥的目的是什么,真的意味着要公开吗? 问题答案: 此配置代码段中的apiKey只能识别您在Google服务器上的Firebase项目。知道它不是安全风险。实际上,他们有必要知道它,以便他们与Firebase项目进行交互。使用Firebase作为其后端的每个iOS和Android应用程

  • 本文向大家介绍.NET微信公众号开发之公众号消息处理,包括了.NET微信公众号开发之公众号消息处理的使用技巧和注意事项,需要的朋友参考一下 一.前言   微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post的xml数据有所差别,在处理消息之前,我们要认真阅读,官方给我们的文档:http://mp.wei

  • 本章所列接口均需依赖手Q环境,测试工程无法正常返回值 查询是否关注公众号前置条件:1.调用接口时需预先加载qqPlayCore.js 2.需已知PUIN 其中 PUIN 传入须为string var PUIN = "2878775916"; BK.QQ.checkPubAccountState(PUIN ,function(errCode, cmd, data) { BK.Script

  • 本文向大家介绍Java微信公众平台开发(1) 接入微信公众平台,包括了Java微信公众平台开发(1) 接入微信公众平台的使用技巧和注意事项,需要的朋友参考一下 前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当

  • 我正在aws中运行openshift 我有一个主节点和两个节点。如何向aws公共IP公开服务?我可以在内部访问服务: 我怎么把它暴露给公共IP呢?是否可以在openshfit web控制台中完成?我尝试使用https://docs.openshift.com/container-platform/3.4/dev_guide/expose_service/expose_internal_ip_ser

  • 本文向大家介绍Java版微信公众号支付开发全过程,包括了Java版微信公众号支付开发全过程的使用技巧和注意事项,需要的朋友参考一下 一、微信官方文档微信支付开发流程(公众号支付) 首先我们到微信支付的官方文档的开发步骤部分查看一下需要的设置。 [图片上传失败...(image-5eb825-1531014079742)] 因为微信支付需要较高的权限,只有认证了得服务号才有使用微信支付接口的权限,我