创建安全的iOS应用-第2部分

侧通道数据泄漏

在这一部分中,数据泄漏的另一个方面以及如何避免它。 第1部分 涵盖本地数据存储风险。 每当作为操作系统(OS)和所使用工具的功能无意中泄漏数据时,都会发生辅助通道数据泄漏。 侧信道数据泄漏的常见示例:

  1. 自动背景快照
  2. 信息通过粘贴板泄漏
  3. 按键记录
  4. 调试日志

这是数据泄漏的方式以及如何避免的方法。

自动后台快照 :每当应用转换为后台时,系统都会捕获应用主窗口的快照并将其保存在手机上的应用文件夹中。 过渡回应用程序时,捕获的快照会短暂显示给用户。 如果屏幕上有敏感信息,则该信息很容易受到黑客攻击。

避免这种泄漏的最佳方法是在应用程序过渡到背景时添加启动屏幕,并在应用程序进入前景时将其删除。 这是AppDelegate.swift中的示例代码:

  var backgroundImage = UIImageView(image:UIImage(named:“ backrgoundImage.png”)) func applicationDidEnterBackground( _ application:UIApplication){ 
//添加启动画面
self.window?.addSubview(backgroundImage)
} func applicationWillEnterForeground( _ application:UIApplication){
//作为从后台到活动状态的过渡的一部分调用; 在这里,您可以撤消输入背景时所做的许多更改。
backgroundImage.removeFromSuperview()
}

信息通过粘贴板泄漏粘贴板是在应用程序之内和之间共享数据的安全方式。 当用户在应用程序中剪切/复制数据时,它会被复制到共享缓冲区中,并可由其他应用程序访问。 如果要避免将数据复制到共享缓冲区,则最好在应用程序过渡到后台时将应用程序的粘贴板清空为空。 这是示例代码:

  func applicationDidEnterBackground( _ application:UIApplication){ 
UIPasteboard.general.items = []
}

按键记录 :iOS的自动更正功能可缓存用户键盘上的所有条目,但以下除外:安全文本,带数字的字符串,小字符串,开发人员标记为不缓存的文本字段。 您可以通过在构建UI时将自动更正类型禁用为“否”来避免击键日志记录,或者可以通过以下编程方式完成。

  textView.autocorrectionType = .no 

调试日志记录 :开发人员在调试应用程序时使用打印语句打印一些数据,这对于调试非常有用,但是如果将应用程序与这些调试日志一起移至生产环境,则可以公开数据。 建议在将应用程序提交到应用程序商店之前删除所有调试日志。 另外,最佳做法是仅在调试模式下使用日志。 这可以通过在Swift Complier标志中添加DEBUG标志并在AppDelegate中添加以下代码来完成:

  func DLog(消息:字符串,函数:字符串= #function ){ 
#if调试
打印(“ \(功能):\(消息)”)
#万一
}