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