保护用户在本地保存的数据以及如何测试安全级别的最佳方法是什么?

时间:2015-09-23 03:22:05

标签: ios security nsuserdefaults keychain user-data

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

  1. NSUserDefault是安全的吗?
  2. 是Keychain Access是安全的吗?
  3. NSUserDefault或Keychain Access或其他任何推荐的更好的方法是什么?
  4. 实施后有什么办法可以通过攻击我的应用来测试吗?

2 个答案:

答案 0 :(得分:6)

  1. 使用NSURLCredentialStorage存储用于访问远程服务的凭据。当持久性类型为NSURLCredentialPersistencePermanentNSURLCredentialPersistenceSynchronizable时,这会使用钥匙串。

  2. 直接使用钥匙串存储不符合上述或其他框架(即帐户或HealthKit)的凭据或个人信息类型

  3. 请勿将敏感信息存储在NSUserDefaults

  4. 将Data Protection API用于所有其他本地数据。这可以使用entitlements在“app wide”上完成,也可以在单个文件和目录上完成(使用NSFileManagerNSData等。

  5. 对第三方框架和库非常警惕。其中许多捕获敏感信息,如用户的位置,并不安全地发送。

  6. 您当然可以尝试攻击您的应用程序或雇用公司为您执行此操作。有很多书籍和资源可以提供指导,其中一个更好的是The Mobile Application Hacker's Handbook

答案 1 :(得分:1)

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

钥匙串更安全,因为: -

  1. Apple自己加密它。
  2. 任何其他应用都无法访问钥匙串,因为它是由您的应用使用的证书签名的。
  3. 一个重要的功能是删除应用后数据仍然存在,而NSUserDefault中不会发生这种情况(删除应用后,所有数据都会被删除。)