Firebase Web-App指南指出,我应该将给定的apiKey
放入我的超文本标记语言中以初始化Firebase:
通过这样做,apiKey
向每个访问者公开。该密钥的用途是什么?它真的意味着是公开的吗?
发布于 2016-12-05 02:40:36
基于prufrofro和Frank van Puffelen在这里的回答,我将这个设置组合在一起,它不会阻止抓取,但会使使用API密钥变得稍微困难一些。
警告:要获取您的数据,即使使用此方法,也可以简单地在Chrome中打开JS控制台并输入:
只有数据库安全规则才能保护您的数据。
然而,我将生产API密钥的使用限制在我的域名上,如下所示:
https://console.developers.google.com/apis
选择您的Firebase项目
凭据
在API密钥下,选择您的浏览器密钥。它应该看起来像这样:"Browser key (由Google Service自动创建)“
在“接受来自这些超文本传输协议推荐者(网站)的请求”中,添加应用程序的网址(例如:projectname.firebaseapp.com/*
)
现在,该应用程序将只在这个特定的域名上工作。因此,我创建了另一个API密钥,它将是本地主机开发的私有密钥。
单击创建凭据> API密钥
默认情况下,正如Emmanuel Campos所提到的,Firebase只将localhost
和您的Firebase托管域列入白名单。
为了确保我不会错误地发布错误的API密钥,我使用以下方法之一在生产中自动使用更受限制的API密钥。
Create-React-App的设置
在/env.development
中
在/env.production
中
在/src/index.js
中
发布于 2017-10-23 12:06:32
我不相信向客户端公开安全/配置密钥。我不会说它是安全的,不是因为有人可以从第一天起就窃取所有的私人信息,因为有人可能会发出过多的请求,耗尽你的配额,让你欠谷歌一大笔钱。
你需要考虑许多概念,从限制人们不能访问他们不应该访问的地方,DOS攻击等等。
我更希望客户端优先连接到您的web服务器,在那里您可以在客户端和服务器之间或服务器和firebase之间放置任何第一手防火墙、验证码、cloudflare、自定义安全,您就可以使用了。至少您可以在可疑活动到达firebase之前先阻止它。你会有更大的灵活性。
我只看到一个很好的使用场景,那就是将基于客户端的配置用于内部使用。例如,您有内部域,并且您非常确定外部人员无法访问该域,因此您可以设置类似于浏览器-> firebase类型的环境。
发布于 2019-08-06 05:53:01
当启用用户/密码注册时,API密钥暴露会创建一个漏洞。有一个开放的API端点,它接受API密钥并允许任何人创建新的用户帐户。然后,他们可以使用这个新帐户登录到受Firebase Auth保护的应用程序,或者使用SDK通过user/pass进行身份验证并运行查询。
我已经向谷歌报告了这一点,但他们说这是预期的工作。
如果您不能禁用用户/密码帐户,您应该执行以下操作:创建一个云函数来自动禁用新用户的onCreate,并创建一个新的DB条目来管理他们的访问。
例如: MyUsers/{userId}/Access: 0
将您的规则更新为仅允许访问权限大于1的用户读取。
如果侦听器功能禁用帐户的速度不够快,那么读取规则将阻止它们读取任何数据。
https://stackoverflow.com/questions/37482366
复制相似问题