【问题标题】:iOS Storing IAP flag in Keychain so it's secureiOS在钥匙串中存储IAP标志,所以它是安全的
【发布时间】:2016-01-06 11:49:09
【问题描述】:

我正在实施钥匙串来存储成功 IAP 的标志。我对此有一些关于安全性的问题,因为我不知道破解我的应用程序的人可以看到哪些对象。

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"theKey" accessGroup:nil];

[wrapper setObject:@"password" forKey:(id)kSecValueData];

如果我在上面的setObjectForKey 方法中输入密码,有人能在可执行文件中看到密码文字或变量吗?当我设置这个时,它不是“赤裸裸的”并且容易被邪恶的黑客抓住吗?

【问题讨论】:

  • 是的,它是赤裸裸的,如果黑客对谷歌了解一点的话:)。您最好不要将“裸”密码存储在任何地方,在黑客获取您的密码之前,散列甚至加密密码可以给您更多时间。
  • 我该怎么做,因为在某些时候它必须是赤裸的?请记住,我必须存储一些布尔标志以了解用户是否进行了 IAP,而不是存储身份验证密码。
  • @FahriAzimov 我刚刚看了看,发现 SKPaymentTransaction 有一个 transactionIdentifier 属性,它是一个唯一的字符串。你觉得用这个作为密码怎么样?我不相信它会在 SKPaymentTransaction 成功返回之前生成。
  • 您到底想防范什么? IAP 的安全问题来自越狱设备,在这些设备上,您不能信任任何东西。您唯一的选择是对收据使用(安全的)服务器端验证。
  • @jcaron 是否有您可以提供解释服务器端验证的链接?基本上我想存储一个布尔标志,表明它已被购买。

标签: ios security keychain


【解决方案1】:

您的安全顾虑是用户会更改文件,因此现在读取“IAP 尚未购买”而不是“IAP 已购买”。避免这种情况的最简单方法是通过将用户的 identifierForVendor 存储在文件变量中,甚至是 NSUserDefault 中来指示 IAP 已被购买。每个设备的 identifierForVendor 都不同。如果您想增加安全性,请创建一个 identifierForVendor 的哈希值和一个只有您知道的秘密字符串,例如“我的秘密”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多