成功购买后,我将receipt+transactionID 保存到NSUserDefaults 。将相同的信息发送到服务器以保存记录。
稍后(按需)当用户想要从我自己的服务器下载内容时,我的应用程序将发送receipt+transactionID 到服务器。它将通过应用程序发送的交易 ID 查找存储的收据,并与 Apple 验证存储的收据和新的收据。如果某些键匹配,则提供可下载的内容。
然而,现在获取NSUserDefaults 并提取receipt+transactionID 并不难。即使我将信息放在钥匙串(keychain)中,也可以从互联网连接中获取收据。
现在如果有人拥有receipt+transactionID,可以向我的服务器发送请求并从任何PC 获取内容。如何在不使用密码学的情况下修补此逻辑?
Best Answer-推荐答案 strong>
虽然您可以修补逻辑以使其更难破解,但如果您想要真正的保护,您需要某种密码学。您不需要显式应用它 - 就像从 HTTP 切换到 HTTPS 一样主流。经常会成功。
您需要保护敏感数据的三个地方是设备上、服务器上和传输中。
要保护设备上的数据,请将其存储在 Keychain :毕竟,存储小块敏感数据是将 Keychain 添加到 iOS 上的存储可能性数组的主要目的。
服务器保护是一个很大的话题,已在众多在线和离线出版物中讨论过;出于此答案的目的,我假设您的服务器已得到充分保护。
剩下的就是保护您在设备和服务器之间以及您的服务器和 Apple 服务器之间传输的数据。您可以使用 HTTPS用于实现传输级保护。
请注意,添加所有这些级别的保护并不能使您的数据绝对安全:拥有大量时间和资源的实体(例如不友好国家/地区的政府)可能会发现您的 key - 例如,通过拆卸物理 key 设备,并使用逻辑分析仪检查来自 CPU 的数据。但是,此练习的目的不是实现绝对保护,而是使破坏您的安全方案的成本高得令人望而却步。为此,Keychain 和 HTTPS 的组合应该可以实现使破坏您的保护比合法购买您的内容更昂贵的目标。
关于ios - 如何防止损害应用内购买收据?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21908864/
|