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

时间:2017-10-12 05:17:44

标签: java android security firebase google-play-services

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

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

从以下主题中读取,看起来任何可以访问google-services.json的人都可以插入和修改我的firebase数据库中的在线数据吗?

我担心任何能够访问反编译的apk配置文件(google-services.json)的人都可以在他们的Android项目中使用它,比如说,创建一个类似包名称和推送的Android应用程序来自我的firebase数据库的恶意数据或删除

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

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

  1. 将firebase的数据库规则编辑为:
  2. {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }

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

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

    2. 感谢您的意见和建议!

2 个答案:

答案 0 :(得分:3)

欢迎来到有效的双层系统的乐趣。您可以做几件事来保护您的数据 - 但不是免费的。

首先是一些事实:

  1. 拥有数据库凭据的人可以访问它
  2. 如果应用可以访问数据,那么任何可以从您的应用中提取数据的人都可以有效地使用您的数据库凭据
  3. 有一些对策可以提高攻击者的标准,但是一个坚定的(或幸运的)攻击者可以获得访问权限。如果他有权进入,很难阻止他造成伤害,例如更改数据库凭据也会强制所有用户更新。

    你能做的是

    1. 决定保护数据不值得付出努力,并且您/您的管理层可以承担风险(但之后您已经 decission 已完成)

    2. 正如您所做的那样使用the firebase ACL。要为每个用户节点创建用户特定的“depots”(请参见下文,此处不会呈现代码)。配置发生在console

    3. 在服务器上构建业务逻辑并将所有凭据放在那里。这将确保您拥有完全控制权

    4. 阻止应用以纯文本格式读取数据。使用公钥算法加密数据。将私钥保留在必须读取数据的系统上。然后,应用程序无法以简单的方式读取数据(但仍然可以查看您拥有多少以及更改率是多少)。这也不会阻止操纵或删除数据。

    5. 示例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"
            }
          }
        }
      

答案 1 :(得分:0)

一些Firebase项目方法(如常规Android和Web(JS)快速入门项目)暴露了向用户共享firebase项目访问权限和凭据的风险。保护firebase数据的唯一方法(如果firebase凭证无法选择从前置客户端隐藏),确实正如@Jens所建议的那样,通过正确定义和构建安全规则。即使可以访问您的项目凭据,恶意黑客也会很难使用您的数据。更多信息说明可在此处找到:

作为对firebase项目凭据的快速更新,我发现使用后端脚本与Firebase进行通信将消除这种担忧,因为脚本和代码实现对用户是隐藏的。 Firebase为各种辅助库提供了对REST API's的出色支持,例如NodeJS,PHP,Python等。使用REST API以及安全规则将使我们的firebase凭据和数据更加私密和安全。