【发布时间】: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 是否有您可以提供解释服务器端验证的链接?基本上我想存储一个布尔标志,表明它已被购买。