我打算使用应用内购买解锁我的应用中的某些功能。 最安全的方法是什么?
最初我打算在NSUserDefaults
:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isPro"];
但我不确定是否有可能通过“hack”设置此值(因为NSUserDefaults
由iOS管理,而不是由应用程序直接管理)因此用户没有执行应用程序内购买以获得完整版本。
处理此问题的最佳做法是什么?
答案 0 :(得分:8)
是的,修改应用程序首选项相对容易。但它真的重要吗?我敢打赌任何愿意破解他们的iPhone文件系统并修改配置文件以节省一两个钱的人并不是那种倾向于花钱的人,如果他们不能这样做的话。
答案 1 :(得分:3)
通过Obfuscation的安全性是最简单的方法(例如,不要将你的var命名为“isPro”,也许没有它的值是一个简单的BOOL,而是让它成为一个“魔术”整数不是万无一失,而是另一个速度破裂。
作为使用NSUserDefaults
的替代方法,您可以将文件保存到应用文件系统,然后在应用启动时检查其内容。
不确定是否值得花时间和麻烦。
答案 2 :(得分:1)
您可以将其保存在钥匙串中,但随后在越狱设备上也可以轻松阅读和更改。所以你应该加密数据。确保通过扫描二进制文件,无法在应用中轻松找到加密密码。
答案 3 :(得分:0)
我遇到了一些问题,并找到了安全存储应用内购买的两种常用方法:
1)使用NSUserDefaults的安全版本:
a)" 安全NSUserDefaults "。此版本的NSUserDefaults会为任何已保存的机密项生成哈希值,并为您提供此项后哈希的验证。所以,你可以很容易地处理这种情况,#ha; hack"默认为.plist by user。
点击此处:https://github.com/matthiasplappert/Secure-NSUserDefaults
b)" SecureNSUserDefaults "。 NSUserDefaults采用AES加密。我的建议不仅仅是存储购买的安全bool值,而是一些模糊的字符串,用于表示付款是否完成。
点击此处:https://github.com/nielsmouthaan/SecureNSUserDefaults
2)使用KeyChain
a)" RSSecrets "用于在KeyChain中存储键值项的简单类。 另见这里的讨论:Storing In App Purchase receipts in the application Keychain
检查项目:https://github.com/jeffargast/RSSecrets
b)" STKeychain "这个类主要用于存储KeyChain中的登录/传递,但是在MKStroreKit项目(iOS设备中流行的应用程序内购买StoreKit)中,他们实际上使用此类来存储应用程序内购买。
点击此处:https://github.com/ldandersen/STUtils/blob/master/Security/STKeychain.h
P.S。我还没有在我的项目中使用过这些类,但是想想使用" RSSecrets"