敏感数据存储在cache.db-wal文件中?

我在iOS应用程序中遇到了一个问题,该应用程序使用UIWebView呈现作为应用程序包一部分的HTML5代码。

这个HTML5代码向我们的后端发出了一个Ajax请求,后端可能有敏感数据。 这一切都是通过HTTPS完成的,我们的应用程序从不存储敏感数据。 但是,在为应用程序进行安全testing时,我们发现http发布的请求存储在iOS 5的本地SQL Lite数据库(cache.db)中。

通过将NSURLCache全局对象设置为零磁盘存储,并在适当的时候删除文件很容易。

然而,现在看起来像在iOS 6.1中,苹果已经改变了实现,数据被存储在cache.db-wal中。 我对SQL Lite的知识有限,但是我认为这是在SQL Lite初始化某些选项时创build的文件。

任何build议,以解决?

经过进一步的研究,似乎上面的Hot Licks的build议是正确的,通过在HTTP响应中添加“no-cache,no-store”值,HTTP请求值没有logging在SQLite数据库中。

例如,在ASP.Net MVC中:

public ActionResult PostSensitiveData(string data) { Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); return Json(data); } 

SQLite创build的其他文件( -journal-wal-shm )是数据库本身的一部分。

当您删除cache.db文件时,也删除任何cache.db-*文件。


为了防止数据被首先插入,打开数据库并在每个表上创build如下的触发器:

 CREATE TRIGGER MyTable_evil_trigger BEFORE INSERT ON MyTable BEGIN SELECT RAISE(IGNORE); END; 

(然后检查当插入的logging实际上没有显示时UIWebView是否爆炸…)

你可以打电话

 [[NSURLCache sharedURLCache] removeAllCachedResponses] 

这将清除Cache.db文件中的所有cachingurl调用。