安全方案

安全方案

KeyChain的使用,这里只讲述两个场景:

非越狱
越狱

在存储用户的登录相关信息的时候,可以选择很多的方式,目前设备中使用最多的存储方式

UserDefault
KeyChain
  • UserDefault优缺点

    API亲和
    使用简单
    依附于程序,程序删除后,登录信息也会被删除
    文件本身没有加密,拿到用户设备的时候,可以在Library中查看UserDefault的plist文件
  • KeyChain优缺点

    API需要自己整合
    使用背景和方式需要调研
    不依附于程序本身,独立于程序之外
    文件本身是加密(Triple Digital Encryption Standard (3DES))存在,即便拿到设备,非越狱无法获得信息

根据上面的分析,KeyChain在用户登录的信息上,占据了更大的优势。但是在向KeyChain中添加数据的时候,考虑到越狱设备的影响,可以先将用户数据加密后再添加到KeyChain中去。

APP进入后台时自动截屏的应对方法

点击HOME键使应用进入后台时,iOS会自动对当前屏幕进行截屏处理,并保存成图片文件,在Mac中可以看到,这些截屏文件会被保存在下述路径中:

<Home>/Library/Caches/Snapshots/(Bundle identifier)/

且文件名以”UIApplicationAutomaticSnapshotDefault-“开头。这些自动生成的截屏文件,对启用了密码保护功能的应用而言,在安全性方面会是个比较严重的问题。针对上面的问题,可以有如下三种方式解决这个问题。

  • 方案一

    经过调试发现,在执行完applicationDidEnterBackground之后系统才会触发截屏处理,所以在这个方法调用之前做一些处理,可以完美的解决这个问题。点击Home键之后,系统会依次触发applicationWillResignActive->applicationDidEnterBackground

    所以可以在applicationWillResignActive函数被触发的时候,检测当前程序密码保护开关是否已经被打开,如果打开,可以在当前window上覆盖上一层白色的或是模糊的保护层,这样即使在截屏的时候,也看不到保护层之下的信息。

  • 方案二

    如果你现在程序最低版本在ios7之上,可以在applicationWillResignActive函数中这样设置:

    @interface
    func applicationWillResignActive(application: UIApplication) {
        UIApplication.sharedApplication().ignoreSnapshotOnNextApplicationLaunch()
      }
    @end
这样的在双击home键的时候,展示的只是这个应用的launchImage。而不会是截图的信息。
  • 方案三

    可以在info.plist中设置UIApplicationExitsOnSuspend属性。但是这个属性设置有点残暴,设置为YES表示不支持后台运行退出到后台立即退出,设置为NO表示支持后台运行。

综合考虑应用的使用场景,使用合适的方案,减少信息泄露的可能。