Iphone 是Apple的异步部分';是否需要新的验证控制器?
我在这里查看了Apple的Verification Controller应用程序内购买补丁: 我计划实现服务器验证,但不需要立即响应 他们的新代码中的异步部分是绝对必要的吗。与简单的服务器端验证相比,它有什么优势吗 如果我可以使用即时解析和检查并获得好处,那就太好了 谢谢 编辑:如果没有一些代码,这个问题感觉有点空洞: 我具体谈论的是将主verifyPurchase函数更改为仅包含: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
- (BOOL)verifyPurchase:(SKPaymentTransaction *)transaction;
{
return [self isTransactionAndItsReceiptValid:transaction];
}
…并摆脱客户端->服务器post。我还会受到最近的黑客攻击吗?在查看代码后,您的问题更有意义 有问题的攻击是有人出示了其他人的有效收据。收据数据中似乎没有任何东西将其与设备/购买者联系起来。通过检查购买日期,您可以在一定程度上缓解这种情况(但前提是设备的时间准确,由用户控制) (如果客户端生成的256位随机nonce必须与收据匹配,则此攻击将不起作用。攻击者显然可以攻击二进制/PRNG,但无论哪种情况,您都已经丢失了。) 顺便说一句,代码有一系列问题:
- 服务器证书的唯一检查是它是EV证书。这应该很容易伪造,因为攻击者完全控制CA
- 在网络检查完成之前,
中的“已看到”交易列表中会永久添加一个交易ID,但只有在网络返回后,内容才会解锁。如果连接失败,收据将永远无法重新验证,因此用户的钱实际上已经进入了一个黑洞-isTransactionAndItsReceiptValid:
- 它希望事务发生在验证它的同一设备上
- 它希望ITC_内容_提供者_共享_秘密嵌入到可执行文件中(用越狱设备解密很简单)
- 它假设
返回完整的接收数据(由于碎片化,情况可能不是这样,但由于苹果控制服务器实现,这可能是可以保证的)-connection:didReceiveData: