2

购买成功后,我将收据+交易 ID 保存到NSUserDefaults. 相同的信息被发送到服务器以保持记录。

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

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

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

4

1 回答 1

4

尽管您可以修补逻辑以使其更难破解,但如果您想要真正的保护,您需要某种密码学。你不需要明确地应用它——像从 HTTP 切换到HTTPS这样的主流方法通常可以解决问题。

您需要保护敏感数据的三个地方是设备上、服务器上和传输中。

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

服务器保护是一个很大的话题,已经在许多在线和离线出版物中讨论过;出于此答案的目的,我假设您的服务器已得到充分保护。

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

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

于 2014-02-20T14:57:19.000 回答