我已经实施了SKProducts的购买,因此从应用商店进行了验证,但我不确定这项验证的用途。 Apple文档说:
应用程序或应用内购买的收据是应用程序销售和应用程序内进行的任何应用程序内购买的记录。您可以向应用程序添加收据验证代码,以防止未经授权的应用程序副本运行。
这是否意味着在未验证应用内购买收据的情况下无法申请应用内购买的价格?或者它与应用程序的真实性相关联?
答案 0 :(得分:5)
@ Paulw11正确地评论道,“可能会破解您的应用或设备以便以欺诈手段进行应用内购买的坏人”,但请让我详细说明。
欺诈性购买的最简单示例可以在任何用户安装了名为Cydia的iAP Cracker应用的越狱iOS设备上找到。这使用户可以绕过iTunes应用商店进行应用内购买,从而免费购买。
iAP Cracker的假设是你的应用程序没有验证收据,因此,提供一个假收据代替真实收据。
有两种验证收据的方法:本地和远程。
Locally validating收据可以确保Apple提供的GUID,bundleId和opaque value与收据一起提供的signature匹配。
欺诈性购买通常会使用重复攻击,使用您应用中的有效收据,但在其他日期使用其他用户。在这种情况下,bundleId将匹配,但GUID不会。或者来自完全不同的应用程序的收据,例如,我经常看到来自“愤怒的小鸟”但与我的应用程序无关的收据。因此,在这些情况下,bundleId和GUID不正确,因此签名将不匹配。
还使用Apple的私人RSA密钥签署收据,这意味着如果使用生成的收据进行攻击,则PKCS#7容器签名将无效。
至于Validating receipts remotely,您可以将Base64编码的收据发送到Apple的服务器进行验证。您很可能在服务器端环境中执行此操作。当Apple收到收据时,它将验证PKCS#7和bundleId,如果bundleId不是您自己的,它将失败,但重要的是要注意它无法验证GUID。
然而,远程验证具有额外的好处,即提供额外的信息,例如为自动续订订购购买而进行的续订和取消,如果您需要将订阅关联到您自己的用户,这将非常方便数据库中。
为了获得最佳安全性,最好在本地和远程建立收据验证。黑客会破解,他们可能会在未来找到解决本地验证的方法,但远程验证的攻击向量仍然很小。
不要低估欺诈性购买的频率,我发现iOS上的欺诈率高达30%,Android上的欺诈率高达80%。 来源:我是应用内购买顾问。