You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程保护Android WebView缓存文件不被篡改

Android WebView缓存防篡改解决方案

以下是针对WebView缓存文件防篡改的可行方案,覆盖不同安全需求场景:

1. 缓存文件哈希校验机制

  • 首次下载并缓存文件时,为每个文件生成SHA-256哈希值,将哈希值存储在Android Keystore或应用私有安全存储区(避免存放在普通缓存目录)。
  • 后续启动加载缓存前,重新读取目标缓存文件计算哈希,与存储的合法哈希值比对:
    • 比对一致则正常加载;
    • 比对失败则丢弃篡改后的缓存,重新从远程获取合法文件并更新缓存及哈希记录。
  • 核心逻辑代码示例:
    // 计算文件SHA-256哈希
    public String calculateFileHash(File file) throws NoSuchAlgorithmException, IOException {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        FileInputStream fis = new FileInputStream(file);
        byte[] buffer = new byte[8192];
        int read;
        while ((read = fis.read(buffer)) != -1) {
            digest.update(buffer, 0, read);
        }
        fis.close();
        return bytesToHex(digest.digest());
    }
    

2. 自定义加密缓存目录

  • 放弃WebView默认缓存路径,将缓存文件存储在应用私有内部存储目录(内部存储比外部私有目录更难被第三方访问)。
  • 对缓存文件采用AES对称加密存储,密钥通过Android Keystore生成和管理(绝对禁止硬编码密钥)。
  • 利用WebView的shouldInterceptRequest方法拦截资源请求,读取加密缓存文件并解密后返回给WebView加载,全程不在磁盘留下明文缓存。

3. 严格限制缓存目录访问权限

  • 创建缓存目录时设置仅应用自身可读可写的权限,阻止普通第三方应用篡改:
    File cacheDir = new File(getFilesDir(), "web_secure_cache");
    if (!cacheDir.exists()) {
        cacheDir.mkdirs();
        // 设置仅应用自身可访问的权限
        cacheDir.setReadable(false, false);
        cacheDir.setWritable(false, false);
        cacheDir.setReadable(true, true);
        cacheDir.setWritable(true, true);
    }
    
  • 注意:此方案无法应对设备被Root后权限被绕过的情况,需配合其他方案使用。

4. 定期远程校验缓存完整性

  • 每次应用启动时,向服务器请求当前缓存文件的最新哈希列表,与本地存储的哈希值比对,发现不一致则触发缓存更新。
  • 若设备被盗且断网,此方案暂时失效,但联网后会自动修复缓存。

内容的提问来源于stack exchange,提问作者harikrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:05:24