在Android上加密WebView缓存

在Android上加密WebView缓存,android,caching,webview,Android,Caching,Webview,我正在寻找一种能够加密写入WebView缓存的所有数据的方法。由于它已被弃用,我试图避免使用CacheManager。我目前的策略是在写入数据之前捕获所有写入缓存和加密数据的尝试,并捕获缓存中的所有数据请求,以便在返回请求的数据之前解密数据。我想可以加密所有数据。但是,在使用后只清除数据可能是更好的做法和安全性。您不应该使用CacheManager是正确的,因为它已被弃用 Android安全设计建议清除缓存: 如果应用程序使用WebView访问敏感数据,则可能需要使用clearCache()方法

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

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

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

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

从这里开始:

但是,如果要加密数据,则必须手动加密。因此,您需要转到Android存储其缓存的目录,并自己对其进行加密。有不同的方法来实现这一点,这取决于你试图完成什么。如何以及何时这样做将取决于你

如果你正在尝试制作一个web浏览器应用程序,我会毫不犹豫地告诉你。最好的方法是为CookieStore或CookieManager类创建一个包装类,可在以下位置找到:


我希望这能有所帮助

目前我正在研究一种能够加密WebView缓存的解决方案。根据你的想法,我正在头脑风暴一些可能的解决方案

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

1。读取和写入libchromeXX.so的钩子

专业的

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

  • 非常危险(现场可能存在特定于架构/设备的问题,可能存在特定于android版本的问题,可能存在webview 具体实施问题)
2。使用inotify侦听fs更改并加密jit(即时)。在下一次应用程序发布时解密

专业的

  • 只有“公共”API
缺点

  • 一些android设备可能不支持“inotify”
  • 在运行时,可以操纵数据(确保仅使用根/系统uid,如果攻击者拥有此权限,他可能会将内容挂起) (无论如何,我们的流程)
3。对所有数据或上次修改/大小组合创建哈希,并单独存储

专业的

  • 只有“公共”API
  • 可能比加密快
缺点

  • 仅验证数据是否被操纵
  • 文摘一定要放在什么地方
4。以某种方式使用ETag机制验证数据

我现在对这个问题的研究并不深入,但ETag可能表示特定资源的哈希,我们可能会验证哈希是否与服务器提供的摘要匹配。我们必须遍历缓存并搜索ETag和资源对,或者是否有现成的浏览器功能?我想不是:(

专业的

  • 如果浏览器支持,验证可能是现成的
缺点

  • 可能不工作或不是ETag的预期用途

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

感谢您的回复。问题是我们绝对希望能够从缓存的使用中获益,但我们希望通过加密缓存的任何数据来保护它,这样,如果设备被盗,就不会有办法检索WebView的缓存数据。W我真正想做的是覆盖WebView对缓存的写入和读取,因为我所需要做的就是加密/解密数据。缓存的其余部分可以按原样工作。