在Android上加密WebView缓存

时间:2012-10-02 19:06:23

标签: android caching webview

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

2 个答案:

答案 0 :(得分:5)

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

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

  

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

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

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

如果您正在尝试制作网络浏览器应用程序,请脱颖而出。最好的方法是为CookieStore或CookieManager类创建一个包装类,可以在这里找到:

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

我希望这会有所帮助

答案 1 :(得分:0)

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

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

1。 GoT钩子读写libchromeXX.so

Pro

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

缺点

  • 风险极高(可能是字段中特定于体系结构/设备的问题,可能是特定于android版本的问题,可能是webview 具体实施方面的问题)

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

Pro

  • 仅“公共” API

缺点

  • 某些android设备可能不支持“ inotify”
  • 在运行时可以对数据进行操作(确保仅使用root / system uid,并且如果攻击者具有此权限,则他可能会在其中添加东西 无论如何,我们的流程)

3。在所有数据上创建哈希或最后修改/大小组合,然后分别存储

Pro

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

缺点

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

4。以某种方式使用ETag机制来验证数据

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

Pro

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

缺点

  • 可能无法正常工作或无法正常使用ETag

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