VerificationController使用uniqueIdentifier

时间:2012-07-24 15:41:09

标签: iphone ios security uniqueidentifier

我正在尝试修补Apple已发现的this安全漏洞。只是,它们提供的示例代码(VerificationController)使用以下行:

[UIDevice currentDevice].uniqueIdentifier

已弃用且已从应用商店拒绝了应用。知道这是否还好吗?或者这里发生了什么?

4 个答案:

答案 0 :(得分:4)

Apple更新了示例代码,删除了使用了UDID的行。

In-App Purchase Receipt Validation on iOS

答案 1 :(得分:1)

UDID与UUID

根据我的理解,Apple不希望开发人员再次访问UDID(唯一设备标识符),因为它不在应用程序的sandbox内。

考虑用户获取新iOS设备(具有不同UDID)的情况。仅仅因为有新设备并不一定意味着有新用户。此外,如果有人获得以前被其他人使用的设备,我们不想假设因为我们拥有相同的设备,同一个用户必须使用它。

Apple建议您为应用程序使用UUID(通用唯一标识符)。 Apple允许您之前使用UDID的唯一原因是因为他们尚未实现UUID或者没有考虑过上述情况(据我所知)。为您要跟踪的对象(例如用户)生成UUID。

基本上, Apple的心态是你应该跟踪用户(或其他情况),而不是设备。


生成UUID

要生成UUID,请尝试将以下内容包括为类方法:

+ (NSString *)GetUUID
{
  CFUUIDRef uuidReference = CFUUIDCreate(kCFAllocatorDefault);
  NSString *theUUID = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidReference) autorelease];
  CFRelease(uuidReference);
  return theUUID;
}

根据我的经验,我在init方法中调用了此方法,并将生成的NSString存储为刚刚创建的实例的属性。

答案 2 :(得分:0)

您在哪里听说应用因使用而被拒绝了?也许他们是恶意使用它,但它是一个公共API。另外,请查看您链接到的页面上的注释。

  

注意:此列表使用符号kSecTrustInfoExtendedValidationKey和SecTrustCopyInfo,它们不是公共API。您的应用程序可以将它们用于此特定目的。

如果他们甚至愿意让你为此目的使用私人API,我怀疑他们会关心公共API。

答案 3 :(得分:0)

Apple的UDID问题始终是他们认为是私人信息,因此他们拒绝将其发送到服务器的应用程序,而不先征得许可。如果您只是在本地使用它,我认为您不会遇到麻烦。