【发布时间】:2015-10-26 21:53:38
【问题描述】:
虽然我的应用不是游戏,但基于硬币的游戏是一个很好的类比。
在这样的游戏中,用户拥有一定数量的硬币,他们可以通过玩游戏或购买 IAP 来赚取这些硬币。主要问题是安全地存储用户在本地拥有的硬币数量。
我知道还有其他类似的问题,例如this。这个答案基本上是说,尝试安全地保存数据是没有用的;只需处理用户可以编辑数据的事实。
我宁愿不只是将数据公开供用户更改(如果他们可以编辑数据,他们为什么要购买 IAP?)。我研究了 Keychain,它有一个用于查看和编辑数据的公共界面,以及 NSUserDefaults,它保存到一个可以轻松更改的 Plist。
对我来说有更好的选择吗,或者我什至不应该尝试(就像上面的答案所暗示的那样)?
编辑:该应用实际上是一个拥有有限数量令牌的开发者工具。因为用户都有技术技能,他们中的大多数(我假设)有足够的知识来查找和更改 Plist 文件或 Keychain 数据。
【问题讨论】:
-
扩展您所使用的威胁模型可能会有所帮助。用户绕过这些控制的动机有多大,如果他们这样做,你的真正成本是多少,任何此类漏洞传播给其他用户的难易程度如何?这种货币有多少方面你真的需要守护,多强? (通过编辑可用的硬币数量,或阻止应用程序减少该数量,或完全跳过对这些硬币的检查,或在花费硬币后恢复到旧状态,您的控件可能会被绕过......)
-
@Jonah 该应用程序是 iOS 开发人员的翻译器(让开发人员可以轻松翻译 Localizable.strings 文件)。每翻译一个字符,就会从用户那里扣除一个令牌。用户有动力补充他们的代币,这样他们就可以继续翻译更多的字符。如果他们可以编辑 Plist,他们可以稍后手动添加更多内容,而不是通过 IAP。
标签: cocoa encryption persistence