敏感信息应存放在何处?

时间:2015-03-02 16:52:00

标签: ios core-data plist nsuserdefaults nsdocumentdirectory

将敏感数据存储在NSUserDefaults中是否公平?

我已经读过这是一个很大的问题,因为NSUserDefaults以二进制格式存储在plist中,没有加密,并存储在应用程序的目录中。这意味着任何用户,甚至是“最苛刻的”用户,都可以用5分钟的时间来修补你的NSUserDefaults。

任何用户都可以使用它编辑,查看,分享,移动和随心所欲。越狱用户可以简单地安装iFile,导航到你的app目录,播放文件,继续他们的一天。

那么,存储用户敏感信息的最佳方式是什么?我应该使用Coredata并存储加密信息吗?

3 个答案:

答案 0 :(得分:2)

要存储用户凭据我会使用Keychain(如果服务器端可以接受某种哈希而不是普通密码,它也会有所帮助)。我说JB的用户可能知道他们在做什么,也可以保护自己,所以我认为Keychain对JB的攻击比没有JB更容易。

要存储地址等内容,如果您使用CoreData(This post可能有帮助),我会使用可转换的属性。

iOS端的额外保护可以是文件保护属性(如果用户设置了密码)。

UserDefaults并不意味着存储敏感信息,因为它基本上是"纯文本"。

答案 1 :(得分:1)

您应该查看此this文档。虽然没有太多的信息,但它仍然是一个很好的起点。此外,您可能会发现从Apple挖掘examples and guides很有用(您必须登录)。祝你好运!

答案 2 :(得分:1)

理想情况下,NSUserDefaults与敏感信息应存储在钥匙串中。但是如果你不想要 keychain 的功能,你应该避免使用它 -

  1. 卸载应用后,钥匙串不会删除信息(键,值)。因此,尽管没有滥用存储在钥匙串中的信息,但请确保您在堆放钥匙链时没有任何问题。卸载应用程序后,将立即删除NSUser默认设置中的信息。

  2. 使用iCloud,钥匙串信息可在有权访问凭据的设备之间共享。虽然它们非常适合您的设备,但并非每次用户在整个设备上使用相同的应用程序时,为什么要传授凭据。

  3. 在MAC密钥链访问等设备上会导致询问权限弹出。