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

时间:2013-07-16 05:24:53

标签: ios objective-c sqlite uiwebview

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

此HTML5代码向我们的后端发出ajax请求,这些请求可能包含敏感数据。这一切都是通过HTTPS完成的,我们的应用程序从不存储敏感数据。但是,在对应用程序进行安全性测试时,我们发现http post请求存储在iOS 5的本地SQL Lite数据库(cache.db)中。

通过将NSURLCache全局对象设置为零磁盘存储并在适当时删除该文件,可以轻松管理它。

然而,现在看来,在iOS 6.1中,Apple再次更改了实现,并且数据存储在cache.db-wal中。我对SQL Lite的了解有限,但我认为这是在使用某些选项初始化SQL Lite时创建的文件。

有关修复的任何建议吗?

3 个答案:

答案 0 :(得分:5)

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

例如,在ASP.Net MVC中:

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

     return Json(data);
}

答案 1 :(得分:1)

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

删除cache.db文件时,还要删除所有cache.db-*个文件。


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

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

(然后检查当插入的记录实际上没有出现时UIWebView是否会爆炸......)

答案 2 :(得分:1)

你可以打电话

[[NSURLCache sharedURLCache] removeAllCachedResponses] 

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