【问题标题】:Firebase Realtime Database Internal Data Representation for Android适用于 Android 的 Firebase 实时数据库内部数据表示
【发布时间】:2023-03-28 05:09:01
【问题描述】:

故事

我有一个严重依赖 Firebase 实时数据库的 Android 应用程序。到目前为止,我使用它没有任何问题。

但是我需要在数据库中存储用户的一些高度敏感的数据,我不想以纯文本形式这样做。

因此,我在将数据存储到数据库之前对其进行了加密。我可以在 Firebase 控制台中看到加密的字符串。

问题

我需要检查并验证 Firebase 数据库在我的本地设备中如何在内部表示数据,因为我还将用于加密的密钥存储在数据库中。

我的数据库有setPersistenceEnabled(),因此 Firebase 将这些数据本地存储在用户设备中。没有提到 Firebase 如何在内部执行此操作。它是将其存储为 JSON 文件还是 SQLite 数据库(最有可能)。

我的尝试

为了更深入地研究问题,我尝试从我的应用程序中提取数据库。

我用过,

"adb -d shell "run-as com.yourpackge.name ls /data/data/com.yourpackge.name/databases/"

在我的终端中获取我的应用程序的所有数据库名称的列表,这就是我得到的,

app-debug-xxxx.firebaseio.com_default
app-debug-xxxx.firebaseio.com_default-journal
crash_reports
crash_reports-journal

那么,这些是我的数据库,对吧?它们是常规的 SQLite 数据库吗?假设它们是 SQLite 数据库,我无法从这些文件中读取数据。

我个人认为了解数据在 Android 中的内部表示方式对我们来说非常重要,这样我们才能做出更好的决定来存储我们的数据。

任何帮助将不胜感激?

【问题讨论】:

  • firebaser here Android 上的磁盘缓存确实存储在 sqlite 数据库中。虽然您可能可以对该数据库中的数据结构进行逆向工程,但它是故意未记录的,并且可能会随着时间的推移而更改,恕不另行通知。访问数据的唯一记录方式是通过 Firebase SDK for Android。
  • 我明白这一点。但是是否可以通过对数据库文件进行逆向工程来读取数据?实际上我在存储数据之前对数据进行了加密,但是 KEY 也存储在数据库本身中。在这方面如何确保更好的安全性?任何帮助将不胜感激?
  • 将密钥存储在数据库中是不安全的。更好的方法是使用系统密钥库生成的密钥对来加密您的密钥。查看example
  • 使用它的最低 API 是多少?

标签: android database sqlite firebase firebase-realtime-database


【解决方案1】:

检查您提到的文件后,是的,它确实是一个 SQLite 数据库文件 (app.firebaseio.com_default)。

数据保存在serverCache 表中,它包含两列:path (TEXT) 和 value (BLOB)。 path 是 firebase 数据库中数据的路径,类似于 /users/-KOasdbcdevalue 是该路径的 JSON 值。

编辑

这是该表的结构

【讨论】:

  • 感谢您的回答。你能详细说明一下吗?如何为不同的嵌套节点构建数据?如果您能解释一下,您是如何从这些文件中读取数据的,那就更好了?
  • @AritraRoy 我已经用该表中内容的屏幕截图更新了我的答案。我为此使用SQLite Debugger 应用程序,但如果您使用的是桌面,也可以使用sqlitebrowser.org
  • 非常感谢。这让我对 Firebase 的内部数据结构有了很多了解。实际上我已经在加密数据,但也需要在这个数据库中保留加密的密钥。但这可以让任何人找到密钥然后解密数据。您能为此提出一些更好的方法吗?
  • 嗨@AritraRoy,看起来您需要托管自己的后端来保存密钥。我没有比这更好的主意了,因为您启用了磁盘持久性,并且在手机中启用了 root 访问权限的用户可以读取该数据库。
  • 但这仍然会使应用程序仅在联机时访问其数据。离线时我将无法调用我的后端并获取密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
相关资源
最近更新 更多