通过In App Purchase完成购买后,将标志存储在NSUserDefaults中是否安全?

时间:2011-06-28 09:22:53

标签: iphone cocoa-touch ios4 in-app-purchase

我有一些功能只有在通过应用购买购买后才能解锁。

如果我将标志值存储在NSUserDefaults中以检查是否已购买应用程序,这样可以吗?

通过In App Purchase完成购买后,将标志存储在NSUserDefaults中是否安全?

3 个答案:

答案 0 :(得分:32)

不,这是不安全

内容NSUserDefaults以纯文本格式存储。可以使用iExplorer等工具访问和修改它们。这也适用于没有越狱的设备。

这意味着如果您将购买信息保存在NSUserDefaults中,用户可以在不进行实际购买的情况下解锁您的内容。

要以不容易“破解”的方式保存标记,您可以执行以下操作之一:

  1. 保存存储信息的额外盐渍哈希值。使用哈希来验证用户是否未修改信息。您可以找到此概念的实现here

  2. 将标记保存在钥匙串中。在Apple的Keychain Services Programming Guide中阅读更多内容。你可以在GitHub上找到这个概念的几个实现,例如Lockbox

  3. 更新:从iOS 8.3开始,对应用程序沙箱的访问受到一定限制。虽然这增加了一些安全性,但我仍然不建议使用NSUserDefaults,因为对于越狱设备,启用了 iTunes文件共享的应用程序,以及运行旧版iOS的设备,仍然可以访问沙箱

答案 1 :(得分:2)

是的,这是最好的方式。因此,您可以通过存储在NSUserDefault中的标记。

但是, 从设备中删除应用程序时,它的值变为FALSE。 所以它会再次要求购买。但是,它不会向用户收取再次购买相同的东西。

干杯。

答案 2 :(得分:1)

是的,这是最好的方法。至少我在我的非消费类应用程序内购买类型存储在NSUSerDefault中。所以它直到现在都是我的魅力。