Iphone 是Apple的异步部分';是否需要新的验证控制器?

Iphone 是Apple的异步部分';是否需要新的验证控制器?,iphone,objective-c,ios,ipad,in-app-purchase,Iphone,Objective C,Ios,Ipad,In App Purchase,我在这里查看了Apple的Verification Controller应用程序内购买补丁: 我计划实现服务器验证,但不需要立即响应 他们的新代码中的异步部分是绝对必要的吗。与简单的服务器端验证相比,它有什么优势吗 如果我可以使用即时解析和检查并获得好处,那就太好了 谢谢 编辑:如果没有一些代码,这个问题感觉有点空洞: 我具体谈论的是将主verifyPurchase函数更改为仅包含: - (BOOL)verifyPurchase:(SKPaymentTransaction *)transacti

我在这里查看了Apple的Verification Controller应用程序内购买补丁:

我计划实现服务器验证,但不需要立即响应

他们的新代码中的异步部分是绝对必要的吗。与简单的服务器端验证相比,它有什么优势吗

如果我可以使用即时解析和检查并获得好处,那就太好了

谢谢

编辑:如果没有一些代码,这个问题感觉有点空洞:

我具体谈论的是将主verifyPurchase函数更改为仅包含:

- (BOOL)verifyPurchase:(SKPaymentTransaction *)transaction;
{
    return [self isTransactionAndItsReceiptValid:transaction];
}

…并摆脱客户端->服务器post。我还会受到最近的黑客攻击吗?

在查看代码后,您的问题更有意义

有问题的攻击是有人出示了其他人的有效收据。收据数据中似乎没有任何东西将其与设备/购买者联系起来。通过检查购买日期,您可以在一定程度上缓解这种情况(但前提是设备的时间准确,由用户控制)

(如果客户端生成的256位随机nonce必须与收据匹配,则此攻击将不起作用。攻击者显然可以攻击二进制/PRNG,但无论哪种情况,您都已经丢失了。)

顺便说一句,代码有一系列问题:

  • 服务器证书的唯一检查是它是EV证书。这应该很容易伪造,因为攻击者完全控制CA
  • 在网络检查完成之前,
    -isTransactionAndItsReceiptValid:
    中的“已看到”交易列表中会永久添加一个交易ID,但只有在网络返回后,内容才会解锁。如果连接失败,收据将永远无法重新验证,因此用户的钱实际上已经进入了一个黑洞
  • 它希望事务发生在验证它的同一设备上
  • 它希望ITC_内容_提供者_共享_秘密嵌入到可执行文件中(用越狱设备解密很简单)
  • 它假设
    -connection:didReceiveData:
    返回完整的接收数据(由于碎片化,情况可能不是这样,但由于苹果控制服务器实现,这可能是可以保证的)

如果您不介意阻塞主线程,当然可以。这往往是一个很大的禁忌,尤其是在网络覆盖率差的地区(连接可能需要很长时间才会超时)。这正是目前的代码。我所做的就是删除网络部分。据我所知,这段代码将无法访问网络。