NSURLSession禁止在Cacahe.db文件中存储返回的报文信息

公司的代码在交由安全分析公司测试的时候,发现了很多的安全问题,其中之一是在沙盒的目录下,存在一个Cache.db的数据库,从中可以读取到很多网络请求返回的关键信息。开始笔者以为是SDK生成的,后来定位发现,这个Cache.db是使用网络请求的时候,系统生成的。


Cache.db来自何方?

当使用 NSURL 相关的框架,使用到缓存的时候,系统会在 Caches目录下创建一个 跟 bundle identifer 同名的一个文件夹,以及里面的 Cache.db、Cache.db-shm、Cache.db-wal
三个文件和文件夹 fsCacheData/ , fsCacheData/ 文件夹会在有需要缓存数据到文件的数据才会有,如缓存图片

用到何处?

使用 NSURLConnect,、UIWebView的都会使用导 NSURLCache 的缓存

如何避免

  • 1.使用系统方法,清理全部的缓存
    1
    [[NSURLCache sharedURLCache]removeAllCachedResponses]

如果工程中使了AFN框架,使用该方法的时候可能会有缺陷,笔者是在请求成功的block中使用该方法的,测试发现,最后一次的网络请求的缓存是没有清理掉的。笔者猜测,回调方法应该是在缓存之前调用了

  • 2.在配置网络请求的时候
1
2
3
4
5
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.timeoutIntervalForRequest = 10.0;
config.requestCachePolicy= NSURLRequestReloadIgnoringLocalCacheData;
config.URLCache = nil;
AFHTTPSessionManager *mgr = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];

最关键的步骤是设置 URLCache为空指针

参考
链接1
链接2
链接3