我必须为iOS和Android开发应用程序。这个应用程序使用一个带有敏感数据的小型sqlite数据库,并根据用户的输入,使用这些数据进行一些处理。完成此过程后,除非用户必须输入新输入(不太可能发生这种情况),否则不再访问数据库。
由于数据库有敏感数据,我必须保护它。我知道不可能得到一个完整的保护,但我想让一个可能的攻击者更加努力。
由于我对安全性知之甚少,所以我不确定考虑到“难度/安全性”的最佳替代方案。
我认为有两种选择:
1)在应用程序中包含数据库并对其进行加密或混淆。
但我想使用root用户安装数据库并不是很困难。
2)将数据库存储在服务器中,每次用户输入应用程序下载数据库的输入时,都会进行处理,然后从应用程序中删除数据库。
但是这个过程需要5-10分钟,也许这个时间足以从应用程序中获取数据库,因此我必须添加与1中相同的保护以及服务器中的保护。
哪个是最好的选择(困难/安全)?还有其他选择吗?
我尝试了几次谷歌搜索,但我对所有这些信息感到困惑,我想尝试一下这个社区的巨大认知。
更新:
好吧,阅读你的答案我倾向于有一个后端而不是将数据库下载到应用程序。它不是客户端的首选解决方案,但它似乎是最好的,所以我会试着说服它。 无论如何,由于应用程序必须执行的过程类型,我不确定是否可以使用后端。 由于这是一个完全不同的问题,我想在其他帖子中提出这个问题:https://stackoverflow.com/questions/29942688/remote-sqlite-queries-from-app
新更新:
我一直在思考这个问题,但我找不到一个好的解决方案,因为这个过程过于复杂。我想过,如果有可能或者没有意义,我想知道的事情(对不起,但我对后端开发知之甚少)。
服务器 - >我的sqlite数据库& PHP Web服务
设备 - >带有用户输入的txt文件(20MB)
这是可能的,还是任何(如果不是全部)步骤都无法实现?
答案 0 :(得分:0)
最安全可靠的方法是将数据库存储在使用对称加密算法加密的服务器上。更好的是,如果您还使用非对称加密算法,如果可能的话,使用某种前向保密,以防您的服务器被黑客入侵。这一切都取决于你想要达到的安全程度。
另一种方法是使用服务器的加密密钥将数据库存储在设备上,需要时将数据库发送到服务器进行解密并返回解密的输出。虽然这在大多数情况下都没有意义,尤其是你的。
答案 1 :(得分:-1)
都不是。最安全的方法是将数据库保留在服务器上,并仅通过webservice访问它,并进行适当的帐户身份验证。如果您向客户发送任何数据,那么充满动力的攻击者就会得到它。对于整个数据库文件,根设备并读取它将是微不足道的。如果你加密它,SQLite将无法读取它(更不用说解密密钥将是本地的,因此很容易进行逆向工程)。
答案 2 :(得分:-1)
您说的最安全的策略....带有数据库和Web服务的后端服务器。
答案 3 :(得分:-1)
使用SQLCipher加密您的数据库。
适用于iOS和Android