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

标签 java android security firebase google-play-services

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

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

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

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

如果有新的巧妙的变通方法可以使在线数据库更安全,您能否提供建议?

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

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

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

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

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

感谢您的意见和建议!

最佳答案

欢迎体验实际上是两层系统的乐趣。您可以采取多种措施来保护您的数据 - 但不是免费的。

首先是一些事实:

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

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

你可以做的是

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

  2. 使用 the firebase ACL正如你已经做过的那样。要创建用户特定的“depot”,请使用每个用户节点(见下文,它不会在此处呈现代码)。配置发生在 console 中.

  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"
      }
    }
  }

关于java - 适用于 Android 的 Firebase 实时(在线)数据库的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701923/

相关文章:

android - 如何为 SearchView 转换 CustomEditText 而不是 EditText?

python - UrlLib2 - 在工作场所网络上请求 ASP.NET 网站时访问被拒绝

security - In_memory 与自定义身份验证提供程序

c# - 如何安全地保存用户名/密码(本地)?

Java 桌面应用程序(awt/swing GUI)到 Web 应用程序

java - 带有 AclPermissionEvaluator 的 Spring Boot 导致 IllegalStateException : No ServletContext set

java - 我可以使用 Hibernate Annotations 自动将 EnumSet 映射到一系列 boolean 列吗?

java - 如何向项目合作伙伴演示用IDE编写的程序?

android - Phonegap/ Cordova : Error while building for android platform

android - 当功能发生代码更改时,我们可以只发布动态功能模块而不是再次发布整个应用程序吗?