一 、数据存储方式
1. 使用NSUserDefaults
2. 写本地文件的方式
3. 存本地数据库
4. 使用keychain 进行数据存储
二、存储的安全分析
1. NSUserDefaults
iOS系统提供的一种保存信息和属性的非常普通的方法,NSUserdefaults 的本质就是把数据存储在本地沙河目录的Library 目录下的Preferences 目录下bundleID. plist命名的文件中,当应用删除时,沙河目录下的数据
一块跟着删除 ,对于应用中和应用安装相关的数据,可以存储在这里, 对于一般未越狱的程序,该数据是安全的,当越狱之后的手机,则数据就不安全啦
2. 写本地文件的方式
iOS 沙河目录包括: tmp , Document ,Library ,Caches四个目录
在iOS手机中,系统是基于unix 系统的移植版,系统目录自然也和unix 的系统目录类似,在一般未越狱的手机中,由于系统权限的设置,应用一般只能操作本应用沙河目录下的文件
未越狱的手机,正常情况下用户是无法访问沙河目录的,但是在开发时在info.plist 文件中设置Application supports iTunes file sharing 设置为YES,用户使用手机连接iTunes 时,是可以访问Document目录下的文件的,
建议一般数据写文件存储在Library 目录下
3. 存本地数据库
写本地数据库,同样也是存储在沙河目录下,对于已经越狱的手机,当数据库的数据为明文时,是有可能被盗取的 ,对于数据库存储
4. 使用keychain 进行密码等关键信息的存储
优点: 1). 通过开发者证书签名将数据加密后存储在手机系统上本地的FTP服务的 sqlite 数据库,保证数据的安全存储 ,独立于当前的应用
2) . 当你删除APP后Keychain存储的数据不会删除,所以在重装App后,Keychain里的数据还能使用
三、风险的规避方案
在本地存储的数据,防止被第三方盗取:
1. 一般不涉及客户隐私和密码的数据,在本地使用NSUserDefaults 进行存储,当牵扯到用户隐私和密码的数据时,建议在存储前使用一定的算法进行加密,在使用时,同样适用相应的算法进行解密
2.涉及用户隐私和密码的数据建议使用keychain 进行本地的数据存储
3. 本地避免敏感数据的存储
4. 在app每一次和服务器进行数据的交互的时候,涉及到敏感数据的时候,客户端和服务器数据通讯时进行RSA+MD5 的加解密,防止第三方的破解
四、 系统的本地数据缓存
使用AFNetworking 、 SDWebImage 等等开源库做网络数据缓存的时候要注意可能会出现重复缓存(因为NSURLCache已经做了一次缓存,存在Disk中 !
1. 使用 NSURLConnect、NSURLSession、UIWebView 的都会使用导 NSURLCache 的缓存
2. 当使用 NSURL 相关的框架,使用到缓存的时候,系统会在 Caches目录下创建一个 跟 bundle identifer 同名的一个文件夹,以及里面的 Cache.db、Cache.db-shm、Cache.db-wal
三个文件和文件夹 fsCacheData/
·fsCacheData/ 文件夹会在有需要缓存数据到文件的数据才会有,如缓存图片
3. 可以使用 [[NSURLCache sharedURLCache]removeAllCachedResponses] 清理这里所有的缓存数据。