我用户能够访问我在应用程序中提供的SQLite数据库吗?

7
我正在开发一款iPad应用程序,它将依赖于一个非常大的有价值信息的数据库。我对这个设备不太熟悉(我没有个人的iPad,也从未在开发这个应用程序之外使用过它)。用户无法直接通过我的应用程序在任何地方查看数据库中的数据。
是否有其他方法让用户访问我的数据库中的数据(例如通过将设备插入计算机并通过Xcode或iTunes进行操作)?如果没有,我已经阅读了一些越狱的信息,我看到这样做可以允许用户访问设备的文件系统,那么他们能否查看我的数据库内容?或者通过越狱并安装应用程序来查看越狱设备上的数据库文件是否可能(事实上this question表明,为越狱设备开发“数据库阅读器”应用程序可能相当容易)?

3
普通的iDevice用户可能不知道数据库是什么,就算你把它塞进他们的鼻子里也不行。但是,一个有知识的用户可以轻松地获取数据库文件,并从iDevice中获取任何/所有数据,如果他们愿意的话。 - Marc B
2
请将任何重要的数据库信息存储在数据库服务器上,而不是iPad上。存储在本地文件/数据库中的任何内容都将对iPad用户可见,尽管您可以考虑加密此信息。 - Joseph Paetz
3个回答

6
如果数据库存在,人们就可以访问它。这只需要比普通用户多一点点的权限。如果他们没有认证凭据,也许无法读取数据库中的数据,但是一旦你在硬盘上有了数据库,只需要耐心和知识就可以进入它。
这是适用于任何设备和操作系统的原则,不仅适用于iPad和iOS。如果您不希望用户搞乱应用程序使用的某些文件,则可以使用非常长的加密密钥对其进行加密。有人可能最终会破解该信息......你能做的就是确保在你的应用程序过时之前,他们不能够这样做。
否则,请将您的数据存储在服务器上,这样人们就无法访问它。

您需要的信息是100%保密的,还是只有一些设置您不希望用户搞砸? - Geeky Guy
更多关于100%保密的事情。我的公司已经收集了约20年对我们行业重要的数据,这就是我需要访问的数据。担心的是客户会获得访问权限,复制它,不再需要我们的服务,或者将其作为成为竞争对手的重要跳板。 - GeneralMike
2
你听说过Hopper吗?在应用程序中加密存储数据库的问题在于应用程序必须知道如何解密它。如果应用程序知道,黑客也会知道。然而,如果用户可以看到数据,他们也可以复制它(即使存储在服务器端)。所以,也许这是一场无望的战斗。只需使用一些基本的加密来阻止普通用户,并完成它。 - Marcus Adams
1
@Renan,你的评论似乎暗示着应用程序正在向数据库写入并上传数据,但问题暗示着应用程序正在从数据库读取。 - Marcus Adams
1
我同意这个问题存在于大多数设备/操作系统中。然而,我认为对于iOS来说,这实际上是更加严重的问题,因为许多开发者被留下了一个对iOS沙盒的错误安全感,以及对App Store应用的限制。越狱在现今几乎不需要技术诀窍,只需使用非常简单的工具,你就可以登录到越狱手机并检查文件系统中的任何文件。这是如此简单的攻击向量,我认为开发者至少需要保护自己免受其影响。 - Nate
显示剩余5条评论

2
我是一名开发人员(而不是黑客),无论我多么努力地保护我的应用程序,只要代码或数据库在设备上(无论是否加密),我都将数据视为公共数据。如果解密密钥传递到手机并在手机上解密,则也将考虑该数据为公共数据。基本上你已经输了。放弃保护你的应用程序,开始构建更酷的东西,并在通过互联网发送数据时使用HTTPS,这就是我能够提出的要求。保护您的密钥、API令牌、高分、硬币等几乎是不可能的。尽管做一些尝试,但您的努力是徒劳的。每天公共黑客工具查看本地加密数据库、本地加密应用程序、查看混淆应用程序的能力越来越好。开发人员并不比黑客聪明,这是事实。给最终用户一种虚假的安全感就像锁住你的房子或汽车一样,你可以阻止别人闯入吗?不行。解决问题的唯一方法是构建一个大银行(即服务器),在前台放置一些出纳员(即云API),然后就完成了。

0

我不是IOS开发人员,但我知道SQLite。您可以在SQLite中加密数据库-查找sqlite3_key_v2()文档。您的应用程序需要在内部拥有密码,但您可以使黑客难以获取该密码。不要使用静态字符串作为密码-而是通过编程方式操纵某些字符串。这将使攻击者更加困难,虽然不是不可能恢复密钥。但它将增加一个数量级的复杂性。攻击者将必须获得对数据库文件本身的访问权限,然后将不得不反向工程化您的应用程序以恢复数据库密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接