如何限制Firebase数据修改?

119

Firebase提供数据库后端,使开发人员可以专注于客户端代码。

因此,如果有人获取了我的Firebase URI(例如https://firebaseinstance.firebaseio.com),然后在本地进行开发。

那么,他们能否创建另一个应用程序,并注册并验证自己以读取我的Firebase应用程序的所有数据?

3个回答

133

@Frank van Puffelen,

你提到了网络钓鱼攻击。实际上有一种方法可以防范这种攻击。

如果你登录到GoogleAPI管理器控制台,你有一个选项可以锁定你的应用程序接受请求的HTTP引用方。

  1. 访问https://console.developers.google.com/apis
  2. 进入你的Firebase项目
  3. 转到凭据
  4. 在API密钥下,选择与你的Firebase项目相关联的浏览器密钥(应该具有初始化Firebase应用程序时使用的API密钥相同的密钥)。
  5. 在“从这些HTTP referrer(网站)接受请求”中简单地添加你的应用程序的URL。

这样只允许白名单域使用你的应用程序。

这也在Firebase启动检查清单中描述: https://firebase.google.com/support/guides/launch-checklist

也许Firebase文档可以更加明显地表明这一点,或者默认自动锁定域并要求用户允许访问?


2
当我进入Google API控制台时,我没有看到锁定HTTP引用的选项。截图会很有帮助。谢谢。 - rattanak
6
使用 Ionic 这样的混合移动应用框架与 Firebase 配合时,如何进行白名单设置?有什么建议吗? - Dinana
2
@prufrofro,这对你来说工作得很好吗?我正在考虑为一个Android应用程序做同样的事情。我想知道为什么Firebase在安全部分没有涵盖这个问题。 - steliosf
2
@Anand 是的,但 Firebase 的文档中并没有涵盖这一点。默认情况下,密钥是公开的,您必须手动限制它们仅在特定包名称和 SHA-1 应用程序证书中使用。我想知道为什么 Firebase 根本没有提到这一点。有什么问题吗? - steliosf
1
我很惊讶人们建议使用 HTTP Referrer 作为保护 Firebase 的方法。众所周知,HTTP Referrer 很容易被伪造和劫持。你只需要像 Burp Suite 或 OWASP ZAP 这样的任何黑客软件,就可以轻松实现。 - Punit Pandey
显示剩余10条评论

44

知道您的URL并不构成安全风险。

例如:我告诉您我的银行在bankofamerica.com上托管其网站,使用HTTP协议进行通信,并没有任何问题。除非您还知道我用于访问该站点的凭据,否则了解URL对您没有任何帮助。

要保护数据,必须通过以下方式保护数据库:

  • 验证规则确保所有数据都符合所需的结构
  • 授权规则确保每个数据位只能被授权用户读取和修改

这些内容都在Firebase有关安全性和规则的文档中有详细介绍,强烈推荐。

有了这些安全规则,其他人的应用程序访问您的数据库的唯一方式是复制您的应用程序功能,使用户在他们的应用程序而不是您的应用程序中登录/读取/写入您的数据库;基本上是网络钓鱼攻击。在这种情况下,数据库中并不存在安全问题,尽管可能需要寻求当局的帮助。


2021年5月更新:由于新功能称为Firebase App Check,现在实际上可以将对Realtime Database的访问限制为仅允许来自注册在您的Firebase项目中的iOS、Android和Web应用程序的用户。

通常需要结合基于用户身份验证的安全性来使用此功能,以便您有另一个屏障防止滥用您的应用程序的用户。

通过结合应用程序检查和安全规则,您既可以广泛地防范滥用,又可以精细控制每个用户可以访问哪些数据。


5
不完全是我想要的答案。让我用另一种方式问你。假设我给了您我的Firebase的URL https://tinderclone.firebaseio.com/https://tinderclone.firebaseio.com/profiles.json,它们是真实的Firebase数据库。您能否基于它们开发一个应用程序,创建一个带有电子邮件注册表格和登录表格的应用程序?由于我的应用程序允许任何人使用电子邮件注册,注册后,您能够阅读所有数据吗?稍后我会问您另一个问题。谢谢。 - rattanak
4
这取决于你如何保护你的数据库。只需添加“.read”: false就能防止任何人看到数据。但你可能需要允许更多操作,这取决于你的具体使用情况。有关数据保护的信息可以在Firebase安全与规则文档中找到。 - Frank van Puffelen
如果您在使用App Check的配额方面遇到问题(或者在这种情况下,似乎您正在引用SafetyNet提供程序),我建议您发布一个单独的问题,分享您的代码和错误信息。@PunitPandey - Frank van Puffelen
@FrankvanPuffelen,我没有任何问题。我只是指出SafetyNet的配额限制,即“每分钟最多5个请求”,使得AppCheck在生产使用中几乎无用。这里是配额的详细信息-https://developer.android.com/training/safetynet/attestation#quota-monitoring - Punit Pandey
这是单个应用程序每分钟可以发出的请求数。App Check仅向Safetynet发出一个请求以获取令牌,该令牌有效期为一小时,因此您不应遇到此配额限制。但是,当然可能会出现错误,因此如果您遇到问题,我建议发布一个新问题,并提供有关该问题的详细信息。 - Frank van Puffelen

7
关于移动应用的认证白名单,当域名不适用时, Firebase 有以下配置项:
  1. Android 应用SHA1 指纹

  2. iOS 应用App Store ID、Bundle ID 和 Team ID(如有必要)

你需要在 Firebase 控制台中进行配置。
通过这种保护方式,验证不仅仅是是否有有效的 API 密钥、Auth 域名等,而且还要判断是否来自我们已授权的应用程序和Web 的域名/ HTTP 引荐来源
也就是说,如果这些 API 密钥和其他连接参数被他人暴露出去,我们也不必担心。
更多信息请参见:https://firebase.google.com/support/guides/launch-checklist

请原谅我的无知,我对加密不是很擅长,但Sha1不是可以通过您的apk访问吗?人们不能仅仅复制Sha1吗?我不知道这有什么帮助。如果有其他证明,我会非常高兴的 :) - cs guy
是的,您肯定可以获取apk的sha1。但这不是您将其作为参数传递给Firebase以验证调用的内容。Firebase在其api-sdk级别(相信来自Android运行时)中获取它。因此,您无法将其作为参数发送到Firebase以伪造连接。 - Anand
1
仅使用SHA1指纹并不能确保您的Android应用与Firebase之间的通信安全。SHA1本身很容易被获取和复制,而且可以使用Firebase API而不是SDK来伪造连接。您应该先验证您的应用程序,并使用一些代码混淆来隐藏密钥。 - FEBRYAN ASA PERDANA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接