Datos sensibles almacenados en el file cache.db-wal?

Me enfrento a un problema en una aplicación de iOS que utiliza un UIWebView para representar el código HTML5 que forma parte del package de aplicaciones.

Este código HTML5 hace requestes ajax a nuestro backend que pueden tener datos confidenciales en ellos. Todo esto se hace a través de HTTPS y nuestra aplicación nunca almacena los datos confidenciales. Sin embargo, al hacer las testings de security para la aplicación, encontramos que las requestes de publicación http donde se almacenan en una database local de SQL Lite (cache.db) a partir de iOS 5.

Era fácil de manejar eso, configurando el object global NSURLCache para que no tuviera ningún almacenamiento en disco, y eliminando el file cuando fuera apropiado.

Ahora, sin embargo, parece que en iOS 6.1 Apple ha cambiado la implementación nuevamente y los datos se almacenan en cache.db-wal. Tengo un conocimiento limitado de SQL Lite, pero creo que este es un file creado cuando SQL Lite se inicializa con ciertas opciones.

¿Alguna sugerencia sobre una solución?

Después de más investigaciones, parece que la sugerencia de Hot Licks anterior fue correcta, agregando el valor "no-cache, no-store" a la respuesta HTTP, los valores de request HTTP donde no se inició session en la database SQLite.

Por ejemplo, en ASP.Net MVC:

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

Los otros files creados por SQLite ( -journal , -wal , -shm ) son parte de la database en sí.

Cuando elimine el file cache.db , también elimine los files cache.db-* .


Para evitar que los datos se inserten en primer lugar, abra la database y cree un desencadenador como este en cada tabla:

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

(Y luego verifique si el UIWebView explota cuando los loggings insertados realmente no aparecen …)

Puedes llamar

 [[NSURLCache shanetworkingURLCache] removeAllCachedResponses] 

Esto borrará todas las llamadas de url almacenadas en caching del file Cache.db.