7

我正在寻找一种能够加密写入 WebView 缓存的所有数据的方法。由于它已被弃用,我试图避免使用 CacheManager。我目前的策略是在写入数据之前捕获所有写入缓存和加密数据的尝试,并捕获来自缓存的所有数据请求,以便我可以在返回请求的数据之前解密数据。

4

2 回答 2

5

我想有可能加密你的所有数据。但在使用后清除数据可能是更好的做法和安全性。您不应该使用 CacheManager 是正确的,因为它已被弃用。

Android 安全设计建议清除缓存:

如果您的应用程序使用 WebView 访问敏感数据,您可能希望使用 clearCache() 方法删除本地存储的任何文件。服务器端标头(如 no-cache)也可用于指示应用程序不应缓存特定内容。

从这里:http: //developer.android.com/guide/practices/security.html

但是,如果您想加密数据,则必须手动进行。因此,您需要转到 Android 存储其缓存的目录并自行加密。根据您要完成的工作,有不同的方法可以做到这一点。如何以及何时这样做将取决于您。

如果您正在尝试制作 Web 浏览器应用程序,那我就想不通了。最好的方法是为 CookieStore 或 CookieManager 类创建一个包装类,可以在这里找到:

http://developer.android.com/reference/java/net/package-summary.html

我希望这有帮助

于 2012-10-02T20:31:36.653 回答
0

目前我正在研究一种能够加密 WebView 缓存的解决方案。根据您的想法,我正在集思广益一些可能的解决方案...

我现在面临的一些可能(或不可能)的解决方案:

1. libchromeXX.so的GoT hook读写

  • 确定性加密和解密缓存。磁盘上不会有任何未加密的数据。

缺点

  • 非常危险(可能的架构/设备特定问题,可能的 android 版本特定问题,可能的 webview 实现特定问题)

2. 用 inotify 监听 fs 变化并加密 jit(及时)。在下一次应用启动时解密

  • 只有“公共”API

缺点

  • 一些安卓设备可能不支持“inotify”
  • 在运行时可以操作数据(确保仅使用 root / system uid,如果攻击者获得此权限,他可能会在我们的进程中挂接东西)

3.对所有数据或最后修改/大小组合创建哈希并单独存储

  • 只有“公共”API
  • 也许比加密更快

缺点

  • 仅验证数据是否被操纵
  • 摘要必须存储在某个地方?

4.不知何故使用ETag机制来验证数据

我现在研究的不是那么深入,但是 ETag 可能代表特定资源的哈希值,我们可能会验证哈希值是否与服务器提供的摘要匹配。我们将不得不遍历缓存并搜索 ETag 和资源对,或者是否有开箱即用的浏览器功能?我猜不是 :(

  • 如果浏览器支持,验证可能是开箱即用的

缺点

  • 可能无法正常工作或不是 ETag 的预期用途

没有任何机制可以验证缓存资源的完整性吗?

于 2020-06-16T14:51:27.177 回答