我为什么要使用自己的服务器验证iOS收据?

时间:2014-04-14 04:12:04

标签: ios iphone security in-app-purchase

我想验证iOS收据。

我以为我会将收据发送到App Store验证服务器(https://sandbox.itunes.apple.com/verifyReceipthttps://buy.itunes.apple.com/verifyReceipt)。

但Apple引用说:

  

无法在用户之间建立可信连接   设备和App Store直接因为您无法控制任何一端   那个联系。

苹果建议将收据发送到我的服务器,然后将其发送到App Store验证服务器进行验证。

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1

我不明白为什么无论使用HTTPS连接如何,设备与App Store之间的连接都不受信任。

1 个答案:

答案 0 :(得分:3)

您的应用在用户控制的硬件上运行。他们可以物理访问它,并可以随心所欲地做任何事情。操作系统并不容易让用户弄乱事情,但可以做到并且黑客可以做到。

您可以在iOS设备上验证iOS收据。但您不能确定收据实际上是否有效。用户可能已经破解了设备以使您认为收据有效。

  

我不明白为什么无论使用HTTPS连接如何,设备与App Store之间的连接都不受信任。

HTTPS不会保护您免受对iOS设备进行物理控制的黑客的攻击。黑客可以在设备上安装不同的SSL密钥,允许它与不同的服务器连接。

当您的应用尝试与Apple的服务器通信时,任何网络管理员都可以更改它,以便联系其他服务器而不是Apple的服务器。此服务器通常会被拒绝,因为SSL密钥将不受信任...但如果用户控制设备,他们可以使其信任无效的SSL密钥。

但是,您的服务器由您控制。您的客户无法访问它。因此,您的服务器(希望!)不能被黑客攻击。这意味着您的服务器可以信任,与设备不同。当您的服务器与Apple的服务器建立SSL连接时,您知道您正在与Apple的服务器通信。您的用户不是为了绕过应用内购买而安装的。

因此,如果用户在您的应用中购买了某些内容...您不想将所购买的内容存储在应用内。您希望将其存储在服务器上,并且该服务器仅在用Apple的服务器验证了收据后才将购买的数据发送到设备。

如果您不想花钱运行自己的服务器,那么您只需要接受任何具有几个小时空闲时间的技术娴熟的人都可以创建虚假的iOS购买收据并说服您的设备他们是有效的。