ios - iOS 8,9 上的 NSUserDefaults 有多安全?

标签 ios swift security in-app-purchase nsuserdefaults

In-App Purchase Programming Guide 建议您可以在 NSUserDefaults 中保留 In-App purchase here .但是我发现this article说它不安全,其中的数据很容易访问和修改:

NSUserDefaults are stored in plist in binary format, with no encryption, and is stored in your app’s directory. This means that any user, even the “noobiest” one, can tinker with your NSUserDefaults with 5 minutes of their time.

如果这是真的,用户可以轻松免费获得任何作为应用内购买提供的东西,这些东西是使用 NSUserDefaults 持久保存的。

这篇文章对于 iOS 8,9 是否仍然正确?如果是这样,您如何保留您的应用内购买?我更喜欢一些简单的解决方案。我不(也不想)验证收据等。

最佳答案

强烈建议不要在 UserDefaults 中保存敏感数据,例如应用内购买或明显的数据(例如密码)。甚至像高分这样的数据也最好保存在钥匙串(keychain)中,这样人们就无法作弊。

我认为部分 Apple 文档已经过时并且应该更改,因为 UserDefaults 不是存储敏感数据的方式,在应用程序购买中这绝对是 IMO。

只需将基本数据保存在 UserDefaults 中,例如语言设置、音频设置等。

如果您想保存敏感数据,您应该使用钥匙串(keychain)。我认为钥匙串(keychain) API 使用起来相当棘手,但您可以使用 GitHub 上的一个很棒的帮助程序,它支持 CocoaPods 和 SwiftPackageManager,并且由其作者积极维护。

https://github.com/kishikawakatsumi/KeychainAccess

还有 2 个我曾经使用过的项目不幸的是似乎不再受支持

https://github.com/jrendel/SwiftKeychainWrapper

https://github.com/matthewpalmer/Locksmith

使用钥匙串(keychain)需要牢记的一件事是,即使您删除了您的应用程序,数据仍然存在,我认为这是一件好事。

所有功劳归功于各自包装器的作者。

希望对你有帮助

关于ios - iOS 8,9 上的 NSUserDefaults 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900523/

相关文章:

ios - 如何组合多个可为空的 NSPredicate?

ios - BecomeFirstResponder 和多个 UITextField 焦点

security - phpinfo() 中 display_errors 中的标准输出是什么意思?

ios - 从 TableView 中检索索引路径

ios - Xcode 中分析分配的新功能

swift - 如何在 UITableView 中为 textLabel 的 alpha 设置动画?

java - 防止客户端/服务器应用程序上的数据篡改

perl - 是否可以使用 DBD::Oracle 在单个查询中执行多个语句?

ios - 带有旋转闪烁动画的自定义指示器,如 UIActivityIndi​​catorView

iOS 在操作时隐藏键盘