首页 文章

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

提问于
浏览
11

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

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

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

3 回答

  • 32

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

  • 2

    不,这是 not safe .

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

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

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

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

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

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

  • 1

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

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

    干杯 .

相关问题