屏幕缓存会危及个人隐私

关键词:屏幕缓存,  屏幕快照, Screen Caching

iOS4及以后版本的 应用程序生命周期有了很大的变化,因为有多线程支持,当应用程序处于活动状态时按主页按钮,程序会转入后台运行,而不会直接退出[1]。iOS应用程序在转入后台运行前,iOS 会拍摄屏幕快照。 在《iOS Application Programming Guide》[2]中,给出了当应用程序转入后台运行时的编程指南,原话如下:

Remove sensitive information from views before moving to the background. When an application transitions to the background, the system takes a snapshot of the application’s main window, which it then presents briefly when transitioning your application back to the foreground. Before returning from yourapplicationDidEnterBackground: method, you should hide or obscure passwords and other sensitive personal information that might be captured as part of the snapshot.

也就是说当应用程序转入到后台之前,应该清除界面上的敏感信息,如信用卡号、Email等等,这些事情可以在方法applicationDidEnterBackground:中完成[1]。至于原因,是iOS应用程序在转入后台运行前, 会拍摄屏幕快照,其优势是当再次载入该应用时,首先会显示该快照图片,让用户感觉苹果的反应敏捷。应用程序屏幕快照文件存储在移动设备上。 如果移动设备丢失,可恢复屏幕快照文件以显示输入应用程序表单的敏感信息。当然,如果想验证恶意软件[3]是否可以访问这些快照文件,可以用以下的代码进行验证:

NSFileManager *fm = [NSFileManager defaultManager];
NSDirectoryEnumerator *dirEnumerator = [fm enumeratorAtPath:@"/"];
NSString *path = nil;
while(path = [dirEnumerator nextObject]) {
	if([fm isReadableFileAtPath:path]) {
		NSLog(@"-- %@", path);
	}
}

也许你会发现一些你意想不到的情况,也许你会读到你认为不该读到的一些文件。

不管怎么样,如果界面上输入的敏感信息(如密码提示问题等,当然敏感信息有时候真的很难鉴别)被屏幕快照抓到,程序就会危及用户的个人隐私。据我所知,现行的大多数iOS应用程序根本就没考虑过这个问题。解决由屏幕快照引发的用户个人隐私泄露问题,方案很简单,

一是在方法applicationDidEnterBackground:中隐藏包括敏感数据的UI控件;或隐藏整个窗口,但一定要留意它后面的窗口会被屏幕快照抓到,所以要隐藏所有可能的窗口。

二是在info.plist中设置UIApplicationExitsOnSuspend为YES,这样程序就不会进入后台运行模式,也就不会拍摄屏幕快照。

第二种解决方案简单直接,但重回iOS4以前,丧失了一些美妙的功能;第一种解决方案就复杂繁琐,你可能不得不判断哪些个UI控件涉及敏感数据,在进入后台运行前隐藏,而重新载入时又要重新显示这些控件,需要多写很多代码。细节可以参考这篇文章What's in your iOS Image Cache? [4]。

也许你会想,苹果为什么会把一个安全问题推给开发者,苹果真的很注重用户体验,但鱼与熊掌不可兼得吧,它就给开发者留下这个安全问题和对应的开发指南。问题是有多少开发者遵循了该指南?倒是有不少黑客盯上了这条缝!


参考:

[1].[iOS]深入浅出 iOS 之生命周期

[2].iOS Application Programming Guide

[3].FSWalker

[4]. What's in your iOS Image Cache?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值