Firebase 实时(在线)数据库对于安卓设备有多安全?

4
我最近开始使用Google的Firebase作为Android应用程序数据的在线集中式数据库(从本地SQLite迁移)。
作为Firebase的新手,我想问一下Firebase在线数据库对于Android的安全性如何?
从以下主题中阅读,似乎任何可以访问google-services.json的人都可以插入和修改我的Firebase数据库中的在线数据? 我担心任何可以访问反编译apk的配置文件(google-services.json)的人都可以在他们的Android项目中使用它,比如创建一个具有类似包名的Android应用程序,并推送恶意数据或从我的Firebase数据库中删除。
您能否提供建议,以便有新的聪明方法来使在线数据库更加安全?

到目前为止,为了增加安全性,我尝试过:

  1. 编辑Firebase的数据库规则以:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

  1. 将 Firebase 的电子邮件/密码认证功能添加到我的应用程序中以控制登录。

    然而,我发现即使没有身份验证功能,新创建的应用程序仍然可以使用“破解”的 google-services.json 对在线 Firebase 数据库进行推送和修改。

感谢您的评论和建议!

2个回答

7
欢迎来到实际上是一个两层系统的乐趣。您可以采取几种措施来保护数据,但需要付费。
首先介绍一些事实:
  1. 拥有数据库凭据的人可以访问它
  2. 如果应用程序可以访问数据,则您的数据库凭据对于任何可以从应用程序中提取它的人有效可用
存在一些对策可以提高攻击者的难度,但决心(或幸运)的攻击者仍然可以获取访问权限。而且,如果他获得访问权限,则很难防止他造成破坏,例如更改数据库凭据还会强制所有用户进行更新。
您可以执行以下操作:
  1. 决定保护数据不值得付出努力,您/您的管理层可以接受风险(但这样您就已经做出了一个决定)
  2. 像以前一样使用Firebase访问控制列表(ACL)。为了创建特定于用户的“存储区”,请使用每个用户节点(请参见下文,在此处不会呈现代码)。配置将在控制台中完成。
  3. 在服务器上构建业务逻辑并放置所有凭据。这将确保您拥有完全控制权。
  4. 防止应用程序以纯文本形式读取数据。使用公钥算法加密数据并将私钥保存在必须读取数据的系统上。然后,应用程序无法以明文读取数据(但仍然可以查找到您拥有多少数据和变化率是多少)。这也无法防止数据的篡改或删除。
示例ACL:
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
"users": {
  "$uid": {
    ".read": "$uid === auth.uid",
    ".write": "$uid === auth.uid"
      }
    }
  }

这个解决方案很好,现在我更清楚地看到Firebase安全主要依赖于创建格式良好的规则,特别是对于向用户公开其凭据的客户端。@Jens - raiser00
2
如果黑客登录为用户,然后对向用户开放的数据发动DDoS攻击(重复下载大量数据),从而增加数据库的负载和成本,那该怎么办? - Aayush Taneja

0

一些Firebase项目方法,例如常规的Android和Web(JS)快速入门项目,会暴露将Firebase项目的访问和凭据共享给用户的风险。如果Firebase凭据无法从面向客户端的客户端中隐藏,则确保Firebase数据的唯一方法是按照@Jens的建议正确定义和构造安全规则。即使恶意黑客可以访问您的项目凭据,他们也很难玩弄您的数据。更多详细说明请参见以下链接:

关于Firebase项目凭据的快速更新,我发现使用后端脚本与Firebase通信将消除这种担忧,因为脚本和代码实现对用户隐藏。Firebase提供了出色的REST API支持,可在各种辅助库(如NodeJS、PHP、Python等)上使用。使用REST API加上安全规则将使我们的Firebase凭据和数据更加私密和安全。


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