NSUserDefault是否保护存储应用程序组数据?
问题描述:
我有两个应用程序,(AppA和AppB)。我想在APPA数据保存和使用访问它在APPB应用程序组:NSUserDefault是否保护存储应用程序组数据?
代码在应用程序答:
- (IBAction)btnSetValuePressed:(id)sender {
NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.tcompany.testName"];
[myDefaults setObject:@"foo" forKey:@"bar"];
[myDefaults synchronize];
}
代码在应用B:
NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.tcompany.testName"];
NSString *myString = [myDefaults objectForKey:@"bar"];
self.lblResult.text = myString;
问题:
它足够安全吗?
答
从某种意义上说,只有具有对该应用程序组的访问权限的应用才能看到该数据,这是安全的。
每个应用都有一个沙箱,只有该应用可以访问其内容。我们称这些应用程序为“应用程序A”和“应用程序B”,因此有两个沙箱,sandboxA和sandboxB
当您定义一个应用程序组时,您有效地创建了应用程序之间共享的第三个沙箱, sandboxC
只有这两个应用程序才能看到共享数据,因此在这个扩展意义上,这两个应用程序都有一个安全的数据专用区域。
应用A可以看到sandboxA但不sandboxB 应用B可以看到sandboxB但不sandboxA 两个应用程序A和B可以读取和写入SandboxC
注意,这两个应用程序在不同的进程中运行,所以它可能是可能的对于应用程序A将数据写入沙箱C,同时应用程序B正在从相同的存储数据项中读取数据,因此必须小心以避免可能的冲突。
如果您使用NSUserDefaults作为存储介质,您将会安全,因为Apple会确保NSUserDefaults在这些并发情况下的行为正确。
安全吗? – trojanfoe
从想要窃取数据的人身上获得安全保护? – user1872384