【问题标题】:What is the best way to secure user's data saved locally in app and how to test security level?保护应用程序本地保存的用户数据的最佳方法是什么以及如何测试安全级别?
【发布时间】:2025-12-13 21:10:01
【问题描述】:
在最近对 App Store 的攻击之后,我在想,在应用程序中为用户数据安全实施的安全措施是否足够?
我知道没有保证可以防止对您应用的数据和逻辑的攻击,但我们仍然可以通过实施某种安全措施来挫败攻击者。我正在寻找以下问题的答案。
- NSUserDefault 是否安全?
- 钥匙串访问是否安全?
- NSUserDefault 或 Keychain Access 或任何其他推荐方法哪个更好?
- 实施后有什么方法可以通过攻击我的应用进行测试?
【问题讨论】:
标签:
ios
security
nsuserdefaults
keychain
user-data
【解决方案1】:
使用NSURLCredentialStorage 存储用于访问远程服务的凭据。这在持久性类型为NSURLCredentialPersistencePermanent 或NSURLCredentialPersistenceSynchronizable 时使用钥匙串。
直接使用钥匙串存储不符合上述或其他框架(即 Accounts 或 HealthKit)的凭证或个人信息类型
请勿在NSUserDefaults 中存储敏感信息。
对所有其他本地数据使用数据保护 API。这可以使用entitlements 或在单个文件和目录上(使用NSFileManager、NSData 等)在“应用程序范围内”完成。
对第三方框架和库保持警惕。其中许多会捕获用户位置等敏感信息并以不安全的方式发送。
您当然可以尝试攻击您的应用程序或聘请公司为您这样做。有许多书籍和资源可用于指导如何做到这一点,其中比较好的一本是 The Mobile Application Hacker's Handbook
【解决方案2】:
这取决于你的数据你想存储什么类型的数据,比如如果你想存储密码或令牌或其他重要的用户信息你应该使用 KeyChain。
钥匙串更安全,因为:-
- Apple 自己对其进行加密。
- 任何其他应用都无法访问钥匙串,因为它由您的应用使用的证书签名。
- 一个重要的特性是删除应用后数据仍然存在,而在 NSUserDefault 中不会发生这种情况(一旦删除应用,所有数据都会被删除。)