适用于 Android 的 Firebase 实时(在线)数据库的安全性如何?

rai*_*r00 4 java security android firebase google-play-services

我最近刚刚开始使用 Google 的firebase作为 android 应用程序数据的在线集中式数据库(从使用本地 sqlite 迁移)。

作为 firebase 的新手,我想问一下 android 的 firebase 在线数据库有多安全?

从以下线程中阅读,是否真的可以访问 google-services.json 的任何人都可以插入和修改我的 firebase 数据库中的在线数据?

我所关注的人谁怎样才能获得一个反编译的apk的配置文件(谷歌services.json)可以使用它在自己的Android项目,比如,创建具有类似的包名的Android应用程序,并按下恶意数据或删除从我火力数据库。

如果有新的聪明的解决方法可以使在线数据库更安全,您能否提供建议?

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

  1. 将 firebase 的数据库规则编辑为:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}
Run Code Online (Sandbox Code Playgroud)

  1. 将 firebase 电子邮件/密码身份验证添加到我的应用程序以控制登录。

    但是,我发现即使没有身份验证功能,新创建的应用程序仍然可以将数据推送和修改到在线 firebase 数据库中,只需使用“被黑”的 google-services.json。

感谢您的意见和建议!

Jen*_*ens 7

欢迎享受有效的两层系统带来的乐趣。您可以采取多种措施来保护您的数据——但不是免费的。

首先是一些事实:

  1. 拥有数据库凭据的人可以访问它
  2. 如果应用程序可以访问数据,那么任何可以从您的应用程序中提取数据的人都可以有效地使用您的数据库凭据

有一些反措施可以提高攻击者的门槛,但坚定的(或幸运的)攻击者可以获得访问权限。如果他有访问权限,则很难防止他造成损害,因为例如更改数据库凭据也会强制您的所有用户进行更新。

你能做的是

  1. 决定保护数据是不值得的努力和你/你的管理可以用风险住(但后来你有一个decission确实做到了)

  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"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 如果黑客以用户身份登录,然后对向用户开放的数据(多次重复下载数据)触发DDoS攻击,增加数据库的负载和成本怎么办? (2认同)