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

Posted

技术标签:

【中文标题】适用于 Android 的 Firebase 实时(在线)数据库的安全性如何?【英文标题】:How Secure is Firebase Real-time (Online) database for Android? 【发布时间】:2018-03-23 22:30:15 【问题描述】:

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

作为 firebase 的新手,我想问一下 firebase 安卓在线数据库的安全性如何?

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

Should I add the google-services.json (from Firebase) to my repository? Is google-services.json safe from hackers?

我担心任何可以访问反编译的 apk 配置文件 (google-services.json) 的人如何在他们的 android 项目中使用它,例如,创建一个具有相似包名称和 push 的 android 应用程序 恶意数据或从我的 firebase 数据库中删除

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

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

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


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

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

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

感谢您的cmets和建议!

【问题讨论】:

【参考方案1】:

欢迎享受两层系统带来的乐趣。您可以做几件事来保护您的数据 - 但不是免费的。

首先是一些事实:

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

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

你能做的是

    决定保护数据不值得付出努力,您/您的管理层可以承受风险(但随后您将有一个决定并完成)

    像以前一样使用the firebase ACL。要创建用户特定的“depot”,请使用每个用户节点(见下文,它不会在此处呈现代码)。配置发生在console。

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

    防止应用读取明文数据。使用公钥算法加密数据。将私钥保存在必须读取数据的系统上。然后应用程序无法读取纯数据(但仍然例如找出您拥有多少以及变化率是多少)。这也不会阻止数据的操纵或删除。

示例 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 安全主要依赖于创建格式良好的规则,特别是对于向用户公开其凭据的客户端。 @詹斯 如果黑客以用户身份登录,然后对用户开放的数据触发DDoS攻击(大量重复下载数据),增加数据库的负载和成本怎么办? 【参考方案2】:

某些 Firebase 项目方法(例如常规 Android 和 Web (JS) 快速入门项目)存在将 Firebase 项目的访问权限和凭据共享给用户的风险。保护firebase数据的唯一方法(如果不能选择对前端客户端隐藏firebase凭据)确实是@Jens提出的,通过正确定义和构建安全规则。恶意黑客将很难使用您的数据,即使他们可以访问您的项目凭据。可以在此处找到更多信息说明:

Secure Your Data Firebase Database Security Rules API

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

【讨论】:

以上是关于适用于 Android 的 Firebase 实时(在线)数据库的安全性如何?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 的 Firebase 推送通知

适用于 Android 和 iOS 应用程序的 Firebase

Firebase 存储无法下载适用于 Android OS 16 的文件

firebase 社交登录不适用于我的 android 设备,仅适用于网络

添加适用于 Android 的 Firebase 应用内消息 SDK 后出错

致命异常:ScioFrontendApi 在使用适用于 Android 应用程序的 Firebase 升级 Google Play 服务时