iOS 8,9上NSUserDefaults的安全性如何?

Ras*_*sto 15 security nsuserdefaults in-app-purchase ios swift

应用内购买编程指南建议您可以在NSUserDefaults 此处保留应用内购买.但是我发现这篇文章说它不安全,并且可以轻松访问和修改其中的数据:

NSUserDefaults以二进制格式存储在plist中,没有加密,并存储在应用程序的目录中.这意味着任何用户,甚至是"最苛刻的"用户,都可以用5分钟的时间来修补你的NSUserDefaults.

如果确实如此,用户可以轻松获得免费提供的任何内容作为持久使用的应用内购买NSUserDefaults.

iOS 8,9的文章是否仍然正确?如果是这样,你如何坚持你的应用内购买?我更喜欢简单的解决方案.我不(也不想)验证收据等.

cra*_*777 28

正如其他人所说的那样,最好不要在UserDefaults中保存敏感数据,例如应用内购买或明显的密码等.甚至像高分的东西也可以更好地保存在钥匙串中,这样人们就不会作弊.

我认为Apple文档的一部分已经过时,应该更改,因为UserDefaults不是存储敏感数据的方式,在应用程序购买中肯定是IMO.

只需在UserDefaults中保存基本内容,如语言设置,音量设置等.

如果要保存敏感数据,则应使用Keychain.现在我认为keychain API非常棘手,但是你可以使用GitHub上的2个很棒的帮助器

1)https://github.com/jrendel/SwiftKeychainWrapper

2)https://github.com/matthewpalmer/Locksmith

我个人使用第一个更直接,更容易使用.它确实使保存数据的任务与UserDefaults相同.只需将swift文件复制到项目中或使用CocoaPods就可以了.

第二个是更先进和复杂但仍然很好.它只是您需要的选择以及您对Keychain API的理解程度.

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

所有功劳都归功于他们各自包装的作者.

希望这可以帮助

  • 是的,你只是从gitHub复制帮助器,它已经在顶部有法律声明.这是非常可靠的,我已经在我的游戏中使用了几个月.使用帮助器保存时返回一个布尔值,这很好.所以我做了什么,因为save方法失败并且返回的bool失败我将它保存在NSUserDefaults中,并且下次keychain save成功时我删除了NSUserDefault数据.这样你就知道什么都不会发生 (2认同)