我必须为 iOS 和 Android 开发一个应用程序。这个应用程序使用一个带有敏感数据的小型 sqlite 数据库,并根据用户的输入,对这些数据进行一些处理。完成此过程后,将不再访问数据库,除非用户必须输入新的输入(这种情况不太可能发生)。
由于数据库有敏感数据,我必须保护它。我知道不可能获得完整的保护,但我想让可能的攻击者的日子更难过。
而且由于我不太了解安全性,所以我不确定考虑到“难度/安全性”的最佳选择是什么。
我考虑过两种选择:
1) 将数据库包含在应用程序中并对其进行加密或混淆处理。
但我想用 root 的 Android 获取数据库不会很困难。
2) 将数据库存储在服务器中,每次用户输入时,应用程序都会下载数据库,然后我会从应用程序中删除数据库。
但是这个过程需要 5-10 分钟,也许这段时间足以从应用程序获取数据库,所以我必须添加与 1) 中相同的保护以及服务器中的保护。
哪个是最好的选择(困难/安全)?还有其他选择吗?
我已经尝试了几次 Google 搜索,但我对所有这些信息感到困惑,我想在这个社区的巨大认可下尝试。
更新:
好吧,阅读您的回答我倾向于有一个后端而不是将数据库下载到应用程序。这不是客户的首选解决方案,但它似乎是迄今为止最好的,所以我会尝试说服它。 无论如何,由于应用程序必须执行的流程类型,我不确定后端是否可行。 由于这是一个完全不同的问题,我想在其他线程中提出:https://stackoverflow.com/questions/29942688/remote-sqlite-queries-from-app
新更新:
我一直在思考这个问题,但我没有找到好的解决方案,因为过程太复杂了。我想过一些我想知道它是否可能或者它是否没有意义的东西(抱歉,我对后端开发了解不多)。
服务器 -> 我的 sqlite 数据库和 PHP 网络服务
设备 -> 带有用户输入的 txt 文件 (20MB)
- 设备:在设备中,txt 文件被压缩 (10MB)
- 设备:应用程序通过 POST 网络服务将 txt 文件发送到服务器。
- 服务器:此txt文件存储在服务器中。
- 服务器:此txt文件已解压。
- 服务器:此 txt 文件已加载到我的 sqlite 数据库中的新表 InputTable 中。
- 服务器:创建了一个新表 UserFinalDataTable(将近 10000 行),使用 InputTable 和我的数据库的其余部分进行大量查询。
- 服务器:UserFinalDataTable 被转换为 JSON 并作为对第 2 步中调用的 Web 服务的响应发送回设备。
- 设备:应用接收此 JSON 并将其转换为对应用有用的内容。
这是否可能或任何(如果不是全部)步骤无法实现?
最佳答案
最安全可靠的方法是将数据库存储在使用对称加密算法加密的服务器上。更好的是,如果你还使用非对称加密算法,如果可能的话,使用某种前向保密,以防你的服务器被黑客攻击。这完全取决于您想要达到的安全程度。
另一种方法是使用服务器的加密 key 将数据库存储在设备上,需要时将数据库发送到您的服务器进行解密并返回解密后的输出。虽然这在大多数情况下没有意义,尤其是您的情况。
关于android - 最安全的移动数据库策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930378/