目前,我们正在为我们公司开发跟踪和追踪应用程序。为了使这个应用程序更安全,我们想在第一次启动时询问用户安全代码。此安全代码很可能是客户编号。
用户使用其跟踪和跟踪代码向服务器发送请求,服务器将检查安全代码以及跟踪和跟踪代码是否已链接。
我的问题是在应用程序中存储安全代码的最佳方法是什么,以便应用程序可以要求将跟踪和跟踪发送到服务器。我们希望用户仅在首次启动时输入安全代码。
[[NSUserDefaults standardUserDefaults] boolForKey:@"security code"];
这会是一个选择吗?
答案 0 :(得分:7)
对于您希望存储在设备上的任何安全数据,我强烈建议您使用钥匙串。然后,您可以在钥匙串中检查代码是否存在,如果可用,则使用该代码。
请参阅以下文档,了解钥匙串!
答案 1 :(得分:2)
user1805901> This security code will most likely be the customer number.
这有多可猜测?您可能希望在丢失的情况下查看UUID。提供从UUID到服务器上的客户编号的映射。
WDUK> For any secure data you wish to store on the device, I strongly advise you use the Keychain.
除钥匙串外,您还必须查看kSecAttrAccessibleWhenUnlocked
,kSecAttrAccessibleAfterFirstUnlock
,kSecAttrAccessibleAlways
,kSecAttrAccessibleWhenUnlockedThisDeviceOnly
,kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
和kSecAttrAccessibleAlwaysThisDeviceOnly
kSecAttrAccessibleAlways
和kSecAttrAccessibleAlwaysThisDeviceOnly
是毒药,不应使用,因为钥匙串可能泄漏数据。有关详细信息,请参阅iOS Keychain Weaknesses(它变得更好,但它仍然可能是一个问题)。
*ThisDeviceOnly
表示恢复到其他设备时不包含该密码。它有助于一些复制/粘贴攻击。
如果你不想在云上使用这个秘密,我相信Keychain属性需要包含com.apple.MobileBackup
。有关详细信息,请参阅Technical Q&A QA1719。
杰夫