Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 服务器接收验证或Apple';s验证控制器.m?_Ios_In App Purchase_Storekit - Fatal编程技术网

Ios 服务器接收验证或Apple';s验证控制器.m?

Ios 服务器接收验证或Apple';s验证控制器.m?,ios,in-app-purchase,storekit,Ios,In App Purchase,Storekit,如果我实现Apple的VerificationController.m示例,是否仍然需要进行服务器端收据验证?此外,如果您使用服务器端,那么似乎没有理由实施VerificationController.m,因为您没有通过该设备联系苹果的服务器 最好的情况是,我宁愿只实现VerificationController.m,因为我没有运行自己的https服务器的好方法。够了吗?该应用程序运行在iOS 5+上,这比它第一次出现时要复杂得多,所以我可能会犯一些微妙的错误,但下面是: 最初的攻击依赖于iOS

如果我实现Apple的VerificationController.m示例,是否仍然需要进行服务器端收据验证?此外,如果您使用服务器端,那么似乎没有理由实施VerificationController.m,因为您没有通过该设备联系苹果的服务器


最好的情况是,我宁愿只实现VerificationController.m,因为我没有运行自己的https服务器的好方法。够了吗?该应用程序运行在iOS 5+

上,这比它第一次出现时要复杂得多,所以我可能会犯一些微妙的错误,但下面是:

最初的攻击依赖于iOS中的两个弱点≤ 5.x:

  • 未能检查App Store服务器是否为正版(允许用户/攻击者安装CA证书,从而绕过SSL证书检查)
  • 未能检查收据是否对该设备有效
这允许用户/攻击者假装是App Store服务器,并为其他人的购买提供有效收据

VerificationController无法修复第一个弱点(它无法改变StoreKit与苹果的对话方式);它主要只是修复了第二个问题。它似乎还检查了很多不必要的东西(但我在这里可能完全错了),包括StoreKit可能已经检查过的一些东西

客户端验证无法防止有人入侵客户端,这在越狱手机上非常容易。如果所购买的物品同样容易被黑客攻击(例如,游戏弹药/关闭广告),那么这并不是一个真正的问题

当服务器提供要购买的物品(例如DLC/Skype信用卡/FarmCoins)时,需要进行服务器端验证

  • 对于耗材,服务器需要确保事务只应用于一个帐户;检查设备ID有点多余-攻击者需要在购买者提交交易凭证之前提交交易凭证,这可能涉及购买者提交凭证(不是真正的攻击),也可能是攻击者通过攻击SSL窃取凭证(这意味着要担心的事情要大得多)
  • 对于非耗材(如DLC),您还需要验证设备ID。这可以像客户端将其设备ID发送到服务器一样简单-这并不能保护客户端免受黑客攻击,但攻击者可以伪造设备ID或盗用DLC
一般来说,在将收据转换为采购项目时进行验证

不过,VerificationController存在一些问题:

  • 它检查收据验证服务器是否使用EV证书,但不执行任何其他SSL层检查。我不知道用户是否可以安装一个支持EV的CA证书(而且在EV CA被破坏之前不会太久)
  • 你必须在应用程序中嵌入收据验证密码(搜索“密码”和“ITC内容提供商共享密码”),这在越狱手机上提取起来很简单。我不确定攻击者会利用它做什么坏事,但肯定的是,秘密的关键在于它是秘密
  • “以前见过”的交易被视为无效,但在联系收据验证服务器之前,它会将交易标记为“见过”!这意味着您永远无法达到
    //验证成功。在此处解锁内容。
    如果收据验证连接失败,这很容易在3G连接不良时发生。这可能不是非易耗事务的问题(我认为恢复的事务会获得一个新的事务ID),但意味着易耗事务将永远丢失。您可以推迟调用
    -[SKPaymentQueue finishTransaction:
    ,直到收据验证成功,但这将在队列中留下不完整的事务-希望它们最终在不向用户收费的情况下过期
  • 它信任NSUserDefaults的内容。这是应用程序备份的一部分,易于编辑
  • 它假定
    -connection:didReceiveData:
    返回所有响应数据。服务器和NSURLConnection的实现细节可能是这样,但依赖于此是不明智的

您是否评论“最初的攻击依赖于iOS中的两个弱点?”≤ “5.x”意味着如果我的应用程序是iOS5或更高版本,那么我就不必为此担心了?这似乎增加了很多步骤,增加了出错的可能性。令人惊讶的是,It操作系统并没有处理其中的大部分(或者可能在5.x+中处理)。小于或等于5.x。它在iOS 6中已修复。分析良好。这段代码似乎是在恐慌中修复一些无法修复的东西。它还使用设备唯一标识符,可能会拒绝您的应用程序,它还使用私有API(他们说现在可以了)。。。充满了危险,更不用说它不是用最新的编译器编译的