成功购买后,我将receive + transactionID保存到NSUserDefaults中。将相同的信息发送到服务器以进行记录。

稍后(按需)当用户想要从我自己的服务器下载内容时,我的应用程序会将回执+交易ID发送到服务器。它将通过从应用程序发送的交易ID查找存储的收据,并通过Apple验证存储的和新的收据。如果某些键匹配,则提供可下载的内容。

但是,如今不难获得NSUserDefaults并提取回执+交易ID。即使我将信息放在钥匙串中,也可以从互联网连接中获取收据。

现在,如果有人将具有回执+交易ID,则可以向我的服务器发送请求并从任何PC获取内容。如何在不使用加密的情况下修补此逻辑?

最佳答案

尽管您可以修补逻辑以使其更难破解,但是如果您想获得真正的保护,则需要某种加密方法。您不需要显式地应用它-从HTTP切换到HTTPS等主流方法通常可以解决问题。

您需要在设备,服务器和传输中的三个位置保护敏感数据。

为了保护设备上的数据,请将其存储在Keychain中:毕竟,存储敏感数据的小块是将Keychain添加到iOS上各种存储方式的主要目的。

服务器保护是一个很大的主题,许多在线和离线出版物中都谈到了服务器保护。出于此答案的目的,我假设您的服务器已得到充分保护。

剩下的就是保护设备和服务器之间以及服务器和Apple服务器之间传输的数据。您可以使用HTTPS来实现传输级别的保护。

请注意,添加所有这些级别的保护并不能使您的数据绝对安全:具有大量时间和资源的实体(例如,不友好国家的政府)可能会发现您的密钥,例如,通过拆卸物理设备,以及使用逻辑分析仪检查从CPU发出的数据。但是,此练习的目的不是要获得绝对保护,而要使破坏您的安全方案的代价过高。为此,将钥匙串和HTTPS结合使用应该可以实现以下目标:与合法购买内容相比,破坏保护的代价更高。

关于ios - 如何防止损害应用内购买收据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21908864/

10-13 09:27