我打算使用应用内购买来解锁我的应用中的一些功能。最安全的方法是什么?
最初我计划在以下位置设置一个 Bool NSUserDefaults
:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isPro"];
但我不确定是否有可能通过“hack”设置此值(NSUserDefaults
由 iOS 管理,而不是直接由应用程序管理),以便用户不必执行应用程序内购买为了获得完整版。
处理这个问题的最佳做法是什么?
我打算使用应用内购买来解锁我的应用中的一些功能。最安全的方法是什么?
最初我计划在以下位置设置一个 Bool NSUserDefaults
:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isPro"];
但我不确定是否有可能通过“hack”设置此值(NSUserDefaults
由 iOS 管理,而不是直接由应用程序管理),以便用户不必执行应用程序内购买为了获得完整版。
处理这个问题的最佳做法是什么?
是的,修改应用程序首选项相对容易。但这真的重要吗?我敢打赌,任何愿意破解他们的 iPhone 文件系统并修改配置文件以节省一两英镑的人都不会是那种如果无法做到就愿意花钱的人。
通过混淆的安全性是最简单的方法(例如,不要将你的 var 命名为“isPro”,也许它的值不是一个简单的 BOOL,而是让它成为一些“神奇”的整数。不是万无一失,而是另一个减速带开裂。
作为使用的替代方法,NSUserDefaults
您可以将文件保存到应用程序文件系统,然后在应用程序启动时检查其内容。
不确定是否值得花时间和麻烦。
您可以将其保存在钥匙串中,但在越狱设备上也很容易阅读和更改。所以你应该加密数据。确保通过扫描二进制文件无法在您的应用中轻易找到加密密码。
我遇到了一些问题,发现了两种安全存储应用内购买的常用方法:
1) 使用 NSUserDefaults 的安全版本:
a)“安全 NSUserDefaults ”。此版本的 NSUserDefaults 为任何已保存的秘密项目生成哈希,并在之后为您提供对该项目的此哈希的验证。因此,您可以轻松地处理这种由用户“破解”默认 .plist 的情况。
在这里查看:https ://github.com/matthiasplappert/Secure-NSUserDefaults
b)“ SecureNSUserDefaults ”。使用 AES 加密的 NSUserDefaults。我在这里的建议不仅仅是存储用于购买的安全布尔值,而是一些用于指示付款是否完成的模糊字符串。
在这里查看:https ://github.com/nielsmouthaan/SecureNSUserDefaults
2) 使用钥匙串
a)“ RSSecrets ”简单类,用于在 KeyChain 中存储键值项。另请参阅此处的讨论:在应用程序钥匙串中存储应用程序购买收据
并检查项目:https ://github.com/jeffargast/RSSecrets
b) “ STKeychain ” 这个类主要用于存储 KeyChain 中的登录/密码,但在 MKStroreKit(iOS 设备的流行应用内购买 StoreKit)项目中,他们实际上使用这个类来存储应用内购买。
在这里查看:https ://github.com/ldandersen/STUtils/blob/master/Security/STKeychain.h
PS我还没有在我的项目中使用任何这些类,但考虑使用“RSSecrets”