通过应用内购买解锁完整版本的安全方式
我打算使用应用程序内购买来解锁我的应用程序中的一些function。 什么是最安全的方法来做到这一点?
本来我打算在NSUserDefaults
设置一个Bool:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isPro"];
但是我不确定是否有可能通过“hack”来设置这个值(因为NSUserDefaults
是由iOSpipe理的,而不是由应用程序直接pipe理的),以便用户不必执行应用内购买为了得到完整版本。
处理这个问题的最佳做法是什么?
是的,修改应用程序首选项相对比较容易。 但这真的很重要吗? 我敢打赌,谁愿意打开他们的iPhone文件系统和修改configuration文件来保存一到两个的人谁不是那种倾向于花钱,如果他们不能这样做的人的types。
通过模糊处理的安全性是最简单的方法(例如,不要把你的var命名为“isPro”,也许没有它的值是一个简单的BOOL,而应该是一个“魔术”整数。开裂。
作为使用NSUserDefaults
的替代方法,您可以将文件保存到应用程序文件系统,然后在应用程序启动时检查它的内容。
不知道这是值得的时间和麻烦。
您可以将它保存在钥匙串中,但是在越狱设备上也很容易阅读和更改。 所以你应该encryption数据。 通过扫描二进制文件,确保在您的应用程序中找不到encryption密码。
我遇到了一些问题,并find两种常见的方式来安全地存储应用程序内购买:
1)使用安全版本的NSUserDefaults:
a)“ 安全NSUserDefaults ”。 这个版本的NSUserDefaults为任何已保存的秘密项目生成哈希,并为之后的项目提供validation。 所以,你可以很容易地处理这个用户“黑客”默认.plist的情况。
检查这里: https : //github.com/matthiasplappert/Secure-NSUserDefaults
b)“ SecureNSUserDefaults ”。 带AESencryption的NSUserDefaults。 我的build议不只是存储安全的布尔值购买,而是一些混淆的string指示付款或不。
在这里检查: https : //github.com/nielsmouthaan/SecureNSUserDefaults
2)使用KeyChain
a)“ RSSecrets ”在KeyChain中存储键值项的简单类。 另请参阅此处的讨论: 在应用程序钥匙串中存储应用程序中的购买收据
并检查项目: https : //github.com/jeffargast/RSSecrets
b)“ STKeychain ”这个类主要用于在KeyChain中存储login/传递,但是在MKStroreKit(适用于iOS设备的stream行的应用内购买StoreKit)项目中,他们实际上使用这个类来存储应用内购买。
在这里检查: https : //github.com/ldandersen/STUtils/blob/master/Security/STKeychain.h
PS我还没有在我的项目中使用这些类,但认为使用“RSSecrets”