敏感数据存储在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调用。