如何防止妥协应用内购买收据?

时间:2014-02-20 13:11:42

标签: ios in-app-purchase nsuserdefaults keychain receipt

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

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

但是,现在抓住NSUserDefaults并提取收据+ transactionID并不难。即使我将信息放在钥匙串中,也可以从互联网连接中获取收据。

现在,如果有人有收据+ transactionID,可以向我的服务器发送请求并从任何PC获取内容。如何在不使用加密技术的情况下修补此逻辑?

1 个答案:

答案 0 :(得分:4)

虽然您可以修补逻辑以使其更难破解,但如果您需要真正的保护,则需要某种加密技术。您不需要明确地应用它 - 这是主流,因为从HTTP切换到HTTPS通常会起到作用。

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

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

服务器保护是一个很大的主题,已在众多在线和离线出版物中得到处理;为了这个答案的目的,我假设您的服务器是充分安全的。

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

请注意,添加所有这些级别的保护并不会使您的数据绝对安全:拥有大量时间和资源的实体(例如,不友好国家的政府)可能会发现您的密钥 - 例如,通过拆卸物理设备,并使用逻辑分析仪检查来自CPU的数据。但是,这个练习的目的不是为了获得绝对的保护,而是为了使你的安全计划破坏成本过高。为此,Keychain和HTTPS的组合应该达到这样的目标:打破保护比合法购买内容更昂贵。