【发布时间】:2018-01-31 18:13:51
【问题描述】:
用户在文本字段中输入他们的密码。我将一个实例变量设置为此值:
let password = passwordTextField.text!
我想确保这些数据不会保留在任何地方,因此我想将这些数据“归零”。
这是否像我完成后将其设置为零一样简单?或者将其设置为空字符串然后为零?
【问题讨论】:
标签: ios swift security encryption
用户在文本字段中输入他们的密码。我将一个实例变量设置为此值:
let password = passwordTextField.text!
我想确保这些数据不会保留在任何地方,因此我想将这些数据“归零”。
这是否像我完成后将其设置为零一样简单?或者将其设置为空字符串然后为零?
【问题讨论】:
标签: ios swift security encryption
这些是一般的 UI 安全提示(来自 Vandad Nahavandipoor 编写的 ios 7 编程食谱)
• 确保用户将所有密码和安全字段输入到实例中
UITextField 的 secureTextEntry 属性设置为 YES。
• 如果用户在包含个人信息的屏幕上,例如用户的信用
卡号或家庭住址,设置应用主窗口的隐藏属性
applicationWillResignActive: 应用程序委托的方法中的 YES,以及
在applicationDidBecomeActive: app 委托方法中将相同的属性设置为 NO(以显示窗口)。这将确保 iOS 截取的屏幕截图
进入后台时,您的应用程序的 UI 将不包含您的任何窗口
里面的内容。 Apple 推荐此方法。
• 确保在发送之前验证用户在文本字段/视图中的输入
他们到服务器。
• 使用您在本章中学到的机制,保护用户的输入,如果
您将其存储在磁盘上的文件中或keychain 中。
• 在您接受密码或数字代码进行身份验证的屏幕上, 一旦视图控制器不再出现在屏幕上,清除那些密码/代码字段 因为用户不再需要它们。如果您不放弃所有权 在这些视图控制器中,它们的内容将保留在内存中。这包括 这些视图控制器上的安全文本字段条目。最好处理掉内存 处理完这些数据后立即包含敏感信息。
【讨论】:
password 的缓冲区不是唯一引用的,则其他一些引用将保持缓冲区完整
我认为不可能确保系统上不会留下任何数据痕迹。正如其他答案所建议的那样,您可以nil 变量,但不能保证该值不会保存在系统某处的内存中。
我听说有人将敏感数据存储在 char 数组中,但即使这样也不能保证它可以从内存中清除,但是如果使用这种方法可能更难追踪数据。但是,我建议不要在您的特定情况下使用此方法,因为正如 Alexander 指出的那样,您可能必须编写自己的 UI 元素。
【讨论】: