5

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

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

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

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

关于修复的任何建议?

4

3 回答 3

5

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

例如,在 ASP.Net MVC 中:

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

     return Json(data);
}
于 2013-07-19T19:58:28.763 回答
1

你可以打电话

[[NSURLCache sharedURLCache] removeAllCachedResponses] 

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

于 2013-12-24T00:06:33.087 回答
1

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

删除cache.db文件时,也删除所有cache.db-*文件。


为了防止数据首先被插入,请打开数据库并在每个表上创建一些触发器,如下所示:

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

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

于 2013-07-16T07:05:21.173 回答