2012-01-11 44 views
3

我已经创建了我从网站获取的个人信息,并存储在我的sqlite3的本地database.The用户进行身份验证的应用程序只能看到后他们的信息成功登录。然后根据需要显示它。我不希望这些信息在手机丢失时被任何人盗用。可以从iPhone应用程序的任何一个访问我的sqlite3的数据库时手机丢失

我已经实现了功能,当应用程序来自于背景,前景它会询问这是在应用程序硬编码了针。

我的问题:

  1. 任何一个可以访问我的sqlite3的本地数据库,当手机丢失?

  2. 有什么方法来加密数据库,并在需要时将其解密?

  3. 如何确保数据库不易受到攻击。

感谢你

+0

认证信息听起来像它应该进入钥匙串。 – BoltClock 2012-01-11 04:26:47

回答

0
  1. 任何人都可以访问您的文件,如果他们能拿到手机(这并不难,例如使用iPhone浏览器)

  2. 我用Google搜索,发现http://sqlcipher.net/。看一看。

  3. 如果您要加密使用用户提供的密码数据库,所以我认为这是确保足够在你的一部分。弱点可能存在于加密部分左右,但我们无法确定。

+0

它不是一个文件。它是一个应用程序内部的数据库。任何人都可以使用iPhone Explorer访问数据库吗? – umakanta 2012-01-11 08:53:43

+0

这是一个文件。 “完整的数据库存储在单个跨平台磁盘文件中。” - http://www.sqlite.org/features.html。是的,无论是在应用程序包内还是外部,iPhone Explorer都可以访问它。 – tia 2012-01-11 09:31:44

0

这是你的问题解决?教育用户使用Find My iPhone应用程序远程擦除丢失的iPhone是最好的。精明的用户会自动执行此操作,以保护他们的联系人,并保存密码PayPay,易趣等

0

正如其他人所指出的,是的,你的信息很可能是访问。

如果您的数据库包含机密信息应该是,至少,使用iOS的安全文件存储机制存储(假设操作系统支持的话...... IIRC它的iOS 4以上版本)。

SQLite的,您sqlite3_open_v2()调用传递而笨重

SQLITE_OPEN_FILEPROTECTION_COMPLETE之一...

选项来启用安全的文件存储。这些常量在sqlite3.h中用其余的声明。

+0

我不写信给任何文件或不使用任何文件。我将从存储在数据库中的网站获取哪些信息。欢迎举例。 – umakanta 2012-01-11 08:58:32

+0

你是说你正在使用纯内存数据库(http://www.sqlite.org/inmemorydb.html)?如果不是,那么*就是一个文件。 – 2012-01-11 10:27:56

1

试试这个..

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"myDatadase.sqlite"]; 
if (sqlite3_open_v2([dbPath UTF8String], &database, SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FILEPROTECTION_COMPLETEUNTILFIRSTUSERAUTHENTICATION, NULL) == SQLITE_OK){ 
    NSLog(@"db opened securely"); 
}else{ 
    NSLog(@"db not opened"); 
} 
相关问题