【问题标题】:Saving User's Coin Count保存用户的硬币数量
【发布时间】:2015-10-26 21:53:38
【问题描述】:

虽然我的应用不是游戏,但基于硬币的游戏是一个很好的类比。

在这样的游戏中,用户拥有一定数量的硬币,他们可以通过玩游戏或购买 IAP 来赚取这些硬币。主要问题是安全地存储用户在本地拥有的硬币数量。

我知道还有其他类似的问题,例如this。这个答案基本上是说,尝试安全地保存数据是没有用的;只需处理用户可以编辑数据的事实。

我宁愿不只是将数据公开供用户更改(如果他们可以编辑数据,他们为什么要购买 IAP?)。我研究了 Keychain,它有一个用于查看和编辑数据的公共界面,以及 NSUserDefaults,它保存到一个可以轻松更改的 Plist。

对我来说有更好的选择吗,或者我什至不应该尝试(就像上面的答案所暗示的那样)?

编辑:该应用实际上是一个拥有有限数量令牌的开发者工具。因为用户都有技术技能,他们中的大多数(我假设)有足够的知识来查找和更改 Plist 文件或 Keychain 数据。

【问题讨论】:

  • 扩展您所使用的威胁模型可能会有所帮助。用户绕过这些控制的动机有多大,如果他们这样做,你的真正成本是多少,任何此类漏洞传播给其他用户的难易程度如何?这种货币有多少方面你真的需要守护,多强? (通过编辑可用的硬币数量,或阻止应用程序减少该数量,或完全跳过对这些硬币的检查,或在花费硬币后恢复到旧状态,您的控件可能会被绕过......)
  • @Jonah 该应用程序是 iOS 开发人员的翻译器(让开发人员可以轻松翻译 Localizable.strings 文件)。每翻译一个字符,就会从用户那里扣除一个令牌。用户有动力补充他们的代币,这样他们就可以继续翻译更多的字符。如果他们可以编辑 Plist,他们可以稍后手动添加更多内容,而不是通过 IAP。

标签: cocoa encryption persistence


【解决方案1】:

这个解决方案非常适合我。试试这个:https://github.com/nielsmouthaan/SecureNSUserDefaults。它将加密的 bool/string/float/integer 存储在您的 UserDefaults 文件中。希望这是你想要的。确保下载并添加CocoaSecurity 到您的项目中。 CocoaSecurity 是 SecureNSUSerDefaults 的必需元素,因此您无需将其导入任何文件。您还必须下载 Base64,这是 CocoaSecurity 的必需元素。您还需要将 Base64 添加到您的项目中,但不需要将其导入到您的任何文件中。

用法

将头文件导入任何你想使用加密方法的地方。

#import <SecureNSUserDefaults/NSUserDefaults+SecureAdditions.h>

然后,设置一个加密密钥,可能在您的 awakeFromNib 方法中

[[NSUserDefaults standardUserDefaults] setSecret:@"your_secret_goes_here"];

我建议生成一个随机的数字和字母字符串。 然后,您必须将信息存储在您的 UserDefaults 文件中。

[[NSUserDefaults standardUserDefaults]
    setSecretObject:@"your_secret_object"
    forKey:@"the_key_your_object_will be_stored_under"];

要检索字符串,请使用以下方法:

NSString *retrievedData = [[NSUserDefaults standardUserDefaults]     
    secretStringForKey:@"the_key_your_object_will be_stored_under"];

我希望这会有所帮助!

【讨论】:

  • 顺便问一下,您的应用程序的名称是什么,完成后如何获取?我有兴趣使用它!
  • 我会试试这个。该应用程序称为 Local,它位于开发人员工具下的 MAS 上。但是想一想……您知道应用程序中的漏洞。我在看你ಠ_ಠ
  • 是的,但是如果没有您的加密密钥,我将无法解密数据!请记住,这是您设置加密密钥的地方:[[NSUserDefaults standardUserDefaults] setSecret:@"your_secret_goes_here"];!
  • 另外,我想到用户可能仍然可以更改 NSUserDefaults 中的首选项,请尝试此解决方案,但如果它不起作用,我建议每次都重新加密数据用户启动应用程序。或者,可能将数据存储在两个不同的位置(例如安全的 NSUserDefaults 文件和加密的文本文档(在 App Support 中),然后在用户启动应用程序时匹配它们,以查看值是否相等。如果不是,则将应用设置为使用两者中较低的值重新加密数据,因为用户只会将其中一个值设置为较高的值。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 2021-08-30
  • 2020-05-09
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多