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

eoigrqb6  于 2022-11-14  发布在  SQLite
关注(0)|答案(4)|浏览(307)

我在使用UIWebView呈现HTML5代码的iOS应用程序中遇到了一个问题,HTML5代码是应用程序包的一部分。
这段HTML5代码向我们的后端发出AJAX请求,其中可能包含敏感数据。这一切都是通过HTTPS完成的,我们的应用程序从不存储敏感数据。然而,在对应用程序进行安全测试时,我们发现,从iOS 5开始,http POST请求存储在本地SQL Lite数据库(cache.db)中。
通过将NSURLCache全局对象设置为没有磁盘存储,并在适当的时候删除文件,可以轻松地管理这一点。
然而,现在看来,在iOS 6.1中,苹果再次改变了实现方式,数据存储在cache.db-wal中。我对SQL Lite的了解有限,但我认为这是在使用某些选项初始化SQL Lite时创建的文件。
有什么解决办法的建议吗?

nom7f22z

nom7f22z1#

经过进一步的研究,通过将“无缓存,无存储”的值添加到HTTP响应中,即没有记录在SQLite数据库中的HTTP请求值,似乎上面的HotLicks的建议是正确的。
例如,在ASP.NET MVC中:

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

     return Json(data);
}
h6my8fg2

h6my8fg22#

SQLite创建的其他文件(-journal-wal-shm)是数据库本身的一部分。
删除cache.db文件时,也要删除所有cache.db-*文件。
为了防止数据首先被插入,请打开数据库并在每个表上创建一些如下所示的触发器:

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

(然后检查当插入的记录实际上没有显示在…上时,UIWebview是否会爆炸)

t5fffqht

t5fffqht3#

你可以打电话给

[[NSURLCache sharedURLCache] removeAllCachedResponses]

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

jyztefdp

jyztefdp4#

我在同样的问题上也有过挣扎。由于我使用的是REACTIVE-Native,我觉得当前的答案不太方便。因此,我想出了两个解决方案:
1.使用此程序包https://github.com/qq273335649/oa-react-native-clear-cache,然后使用函数leararCache。问题是它擦除了所有的缓存,不一定很方便。
1.在将机密数据保存在缓存中的查询完成后,我使用包expo-file-system删除了db-wal文件(您需要使用expo来执行此操作)
我希望它能帮上忙。

相关问题