我的应用程序必须有一个非常安全的故事,并且我想将标准iOS设置用于我的Apps设置时,我无法在任何地方找到我用作密码的“安全文本字段”是否使用了钥匙链?

最佳答案

“设置”捆绑中的所有内容都存储在NSUserDefaults中。但是问题是,为什么当时有一些著名的应用程序(例如Facebook)提供用户更改用户默认密码的功能?这是我的想法。


您在“设置”应用中看到的密码是安全文本字段,用户无法阅读或编辑!他只能输入一个新的!
您可以执行以下算法:
2.1当用户在“设置”应用中输入密码时,您将收到有关该密码的通知。
2.2您将获得此新密码(如果需要,请选中该密码)并将其保存在安全存储中,即密钥链或NSURLCredentials中。
2.3您从NSUserDefaults中删除了该密码。实际上,您将其替换为包含相同数量字符的伪文本。然后,用户将无法检测到它是密码还是伪字符,因为它们是安全的。


您订阅有关NSUserDefaults的通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];


您实现defaultsChanged :(这是我即时编写的...未经测试)

- (void)defaultsChanged:(NSNotification *)notification {
  // Get the user defaults
  NSUserDefaults *defaults = (NSUserDefaults *)[notification object];
  NSString *newPassword = [defaults objectForKey:@"YourPasswordKey"];

  // (Check new password if necessary) save it securely
  // Or store it securely and use it for authentication only when the User returns to your app again.

  NSString *dummyText = //The string the same length as newPassword containing e.g. only * character

  [defaults setObject:dummyText forKey:@"YourPasswordKey"];
}


摘要:您允许用户通过“设置捆绑包”在“设置”应用中输入密码。但是您可以安全地存储密码。此敏感信息将出现在“用户默认值”中仅非常短的时间。用户是否会知道它是否是“设置”中的密码。

注意:如果您的应用未启动,则在启动之前可能不会收到通知。在这种情况下,您可以阅读NSUserDefualts以获取新的密码值,并在应用启动时进行替换。无论如何也不会很长时间,因为用户可能会在更改密码后不久启动您的应用程序。

问候。

关于ios - iOS设置架构安全文本字段是否使用 key 链即安全存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23316420/

10-14 21:12
查看更多