【发布时间】: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