购买成功后,我将receipt+transactionID保存到NSUserDefaults
中。将相同的信息发送到服务器以保存记录。
稍后(按需)当用户想从我自己的服务器下载内容时,我的应用程序将把receipt+transactionID发送到服务器。它将通过应用程序发送的交易ID查找存储的收据,并与Apple一起验证存储的收据和新的收据。如果某些键匹配,则提供可下载的内容。
然而,现在获取NSUserDefaults
和提取receipt+transactionID并不难。即使我将信息放在密钥链中,也可以捕获来自互联网连接的收据。
现在,如果有人有receipt+transactionID,可以发送一个请求到我的服务器,并从任何PC获取内容。如何在不使用加密技术的情况下修补此逻辑?
发布于 2014-02-20 06:57:19
虽然您可以修补您的逻辑,使其更难打破,但如果您想要真正的保护,您需要某种密码学。您不需要显式地应用它--从HTTP切换到HTTPS这样的主流技术通常会起作用。
您需要保护敏感数据的三个位置在设备上、服务器上和传输中。
为了保护设备上的数据,将其存储在密钥链中:毕竟,存储小块敏感数据是向iOS上存储可能性数组添加密钥链的主要目的。
服务器保护是许多在线和离线出版物中讨论过的一个大主题;为了回答这个问题,我假设您的服务器是充分安全的。
剩下的是保护在设备和服务器之间传输的数据,以及在服务器和Apple服务器之间传输的数据。您可以使用HTTPS实现传输级别的保护。
请注意,添加所有这些级别的保护并不能使您的数据绝对安全:一个拥有大量时间和资源的实体(例如,一个不友好国家的政府)可能会发现您的密钥--例如,通过拆卸物理设备,并使用逻辑分析器检查来自CPU的数据。然而,这个练习的目的不是为了实现绝对的保护,而是为了使破坏您的安全计划的代价过高。为此,将Keychain和HTTPS结合起来,应该可以达到这样的目标,即破坏保护的成本要比合法购买内容更昂贵。
https://stackoverflow.com/questions/21908864
复制