如何保证用户界面符合iOS最通用的安全指导规范。
遵从以下规范:
需要进一步说明上述列表中的第二条。当用户在iOS设备的屏幕上查看应用时,按下Home键可以将应用置为不激活状态并转到后台。之后iOS会保存应用界面在屏幕上的截屏,截屏文件保存在应用沙盒的Library/Caches/Snapshots/文件夹里。当用户将应用重新置为前台状态时,iOS会暂时显示截屏内容,直到应用重新激活并控制屏幕,这样让后台到前台的切换看起来很流畅。虽说这项功能对用户体验来说是加分项,但也要考虑其安全性。当应用屏幕被截屏时,屏幕上的敏感信息也会保存在文件中并存储在磁盘上。iOS里并不能禁用这项功能,但是可以抵销它对安全方面带来的负面作用。苹果推荐的解决办法是,在应用的主窗口上覆盖别的视图,或者通过设置hidden为true在程序不激活的状态下隐藏主窗口,当程序被激活时,将属性值改回false使窗口变得可见。
为了符合这项安全要求,iOS开发者常犯的一个错误是将应用keyWindow的hidden属性置为true或者false。 虽然keyWindow在程序非激活状态时是一个有效的窗口,但在程序激活状态下,它的值是nil。为避免这个错误,需要在应用的委托中使用window属性来隐藏或显示窗口。
其他引发安全问题的因素还有个人信息残留在视图控制器中。假定有一个负责登录的视图控制器可供用户输入用户名和密码。当登录按钮被按下时,用户凭证会以HTTPS网络连接发送到服务器。用户通过验证后,会被推送到另一个视图控制器。这种方式的问题在于输入的用户名和密码仍然在内存当中,因为输入的视图控制器还在内存中。(想起来没,它还在导航控制器的视图控制器栈中。)
解决这个问题并增强界面安全的方法是在推送后续视图控制器到屏幕上时,把输入文本域的text属性置为nil;也可以覆盖登录控制器的viewWillDisappear:实例方法,在那里将文本域的text属性置为nil。但是,你要注意这个方法可能会在任意视图控制器消失的时候被调用,例如用户切换到其他标签栏然后再切回来的情况。也就是说视图控制会消失然后再出现,那么如果文本域在消失时被清空,用户第二次切回来时就需要重新输入内容。这种情况下没有唯一正确的处理方式,需要根据业务需求来选择。
原文:https://www.cnblogs.com/hualuoshuijia/p/12039980.html