保护本地保存在应用程序中的用户数据的最佳方式是什么?如何测试安全级别?

What is the best way to secure user's data saved locally in app and how to test security level?

在最近App Store 被攻击后,我在想应用程序中为用户数据安全实施的安全措施是否足够? 我知道没有保证的方法可以防止对您应用的数据和逻辑的攻击,但我们仍然可以通过实施某种安全措施来挫败攻击者。我正在寻找以下问题的答案。

  1. NSUserDefault 安全吗?
  2. 钥匙串访问安全吗?
  3. NSUserDefault 或 Keychain Access 或任何其他推荐的方法哪个更好?
  4. 实施后有什么方法可以通过攻击我的应用程序来测试吗?

这取决于你的数据,你想存储什么类型的数据,比如如果你想存储密码或令牌或其他重要的用户信息,你应该使用 KeyChain。

钥匙串更安全,因为:-

  1. Apple 自己对其进行加密。
  2. 任何其他应用程序都无法访问钥匙串,因为它是由您的应用程序使用的证书签名的。
  3. 一个重要的特性是数据在删除应用程序后仍然存在,而这不会发生在 NSUserDefault 中(一旦删除应用程序,所有数据都会被删除。)
  1. 使用 NSURLCredentialStorage 存储用于访问远程服务的凭据。当持久性类型为 NSURLCredentialPersistencePermanentNSURLCredentialPersistenceSynchronizable.

  2. 时,这会使用钥匙串
  3. 直接使用钥匙串来存储不适合上述或其他框架(即帐户或 HealthKit)的凭证类型或个人信息

  4. 不要在NSUserDefaults中存储敏感信息。

  5. 对所有其他本地数据使用数据保护 API。这可以 "app wide" 使用 entitlements 或对单个文件和目录(使用 NSFileManagerNSData

  6. 非常警惕第 3 方框架和库。其中许多会捕获用户位置等敏感信息并以不安全的方式发送。

您当然可以尝试攻击您的应用程序或聘请一家公司为您这样做。有许多书籍和资源可用于指导如何这样做,其中一个更好的是 The Mobile Application Hacker's Handbook