用户退出应用程序时在设备上安全保存私人数据

Posted

技术标签:

【中文标题】用户退出应用程序时在设备上安全保存私人数据【英文标题】:Saving private data securely on device when user exits application 【发布时间】:2011-08-02 17:49:58 【问题描述】:

我想保存诸如用户 ID 和密码之类的内容以及其他类似的内容(属性), 直到现在我都是用 plist 做的,但我知道 plist 可以从 iTunes 和类似的东西访问,所以还有其他方法可以保存这样的东西吗?

【问题讨论】:

【参考方案1】:

您应该使用Keychain Services。

【讨论】:

【参考方案2】:

如果您想存储用户名/密码值,最好将它们存储在Keychain 中。可以在blog entry 中找到如何执行此操作的一个示例。

【讨论】:

【参考方案3】:

没有一种简单的方法可以专门在应用程序退出时加密数据。如果您需要始终在磁盘上加密所有内容,钥匙串服务是唯一的选择。

不过,ios 也支持数据保护。如果用户在设备上设置了密码,则应用程序的文件可以由设备自动加密。这称为“文件保护”,有多种可用选项。例如,NSDataWritingFileProtectionComplete 选项将导致文件完全加密,除非设备未解锁。如果有人不知道设备的密码,他们将根本无法访问这些文件。

要使用此 API,请使用您要写入的文件的内容创建一个 NSData。然后传递文件保护选项如下:

NSData *theData;
NSError *error;
[theData writeToURL:someURL
            options:NSDataWritingFileProtectionComplete
              error:&error];

如果您只是保存用户名/密码信息,您应该将密码存储在钥匙串中。用户名将是您检索密码的密钥,因此您需要将其存储在其他地方。您可以使用上面详述的文件保护来为用户名添加某种程度的保护,但它不如钥匙串安全。

【讨论】:

当我想读取我保存的数据时,我可以毫无问题地从我的应用程序中读取它? 可以,只要设备已解锁。 (如果您使用后台执行 API 并且在设备锁定时在后台运行,那么您此时将无法访问该文件。)【参考方案4】:

核心数据可能是一个很好的解决方案,我不认为任何人都可以访问核心数据,无论如何都不容易。

【讨论】:

错了。当您将手机同步到计算机时,所有数据都将复制到计算机上。此时,您的 Core Data 存储只是一个 SQLite 文件,您可以在命令行使用 sqlite3 命令读取它。当然,您必须先找到文件,并且数据的名称可能不够直观,但这肯定不安全。使用钥匙串服务会更好。【参考方案5】:

这是一个在您的 App Delegate 中使用 applicationWillTerminate 的教程。虽然它不使用 KeyChain 服务,但您需要添加它。它使用的是 plist。

http://servin.com/iphone/iPhone-Save-and-Restore-Mini-Course.html

【讨论】:

在应用退出时加密不是很安全。不保证在所有情况下都会调用applicationWillTerminate

以上是关于用户退出应用程序时在设备上安全保存私人数据的主要内容,如果未能解决你的问题,请参考以下文章

教你简单实现小程序的一键登录、当前用户、用户安全功能

iOS 设备上 ObjC 对象的安全解除分配

应用程序进入后台时在 Flutter 上显示本地通知

离开 iPhone 时在 Apple Watch 上记录和保存锻炼?

如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?

如何在 Cordova 应用程序退出时保存状态?