此问题与
AppStore in-App Purchase Receipt Verification Issues
简而言之 - 来自iTunes的收据数据以奇怪的有点JSON格式编码,没有任何规范。接受的答案表明没有必要对其进行解码,必须将其发送到iTunes。
在我的情况下,我希望解码该数据,以确保bundle_id
参数等于我的应用bundle_id
。
https://buy.itunes.apple.com/verifyReceipt
方法将收据视为有效,即使它没有为我的应用程序生成 - 所以如果黑客将其他应用程序的有效收据发送到我的服务器 - 他就会成功。
问题在于如何正确地进行此类验证,iTunes开发人员肯定不会采取额外步骤(否则他们不会使用伪JSON),但我认为有必要保护此类攻击。<登记/> 有什么想法吗?
答案 0 :(得分:1)
吉尔,您应该考虑验证不透明的收据数据,而不是试图解释它。将其发送到Apple的verifyReceipt服务并检查响应。它将是一个非奇怪的JSON对象。如果“status”字段为0,则Apple认为它是有效的收据,但由您的服务器应用程序决定是否在有效的上下文中使用它。为此,您可以检查“收据”对象,您可以在其中找到许多其他内容中的包和产品ID。
如果您在发送给Apple之前决定对收据数据进行一些预先验证,那么您也可以通过一些额外的努力来做到这一点。它是base64编码的JSON对象,包含两个其他base64编码对象,其中一个是如上所述的收据数据。此方法的问题是Apple服务用户无法检查数据,因此如有更改,恕不另行通知。然而,它可能是一种有用的调试技术。
答案 1 :(得分:0)
如果您使用的是iOS7,则可以使用设备上方法进行收据验证,包括bundle_id验证。看看 - iOS InApp Purchase Receipt Validation iOS 7和A complete solution to LOCALLY validate an in-app receipts and bundle receipts on iOS 7。我假设您正在谈论设备上的验证,而不是使用您自己的服务器来处理验证。