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

Zip路径遍历漏洞仅在Android 11系统触发的可能原因有哪些?

仅Android 11触发该异常的可能原因如下:

  • 外部存储路径软链接解析差异
    Android 11对外部存储的路径别名处理做了调整,getExternalFilesDir返回的File对象调用toString()得到的可能是软链接形式的路径,而destination.getCanonicalPath()会解析成真实物理路径,两者前缀不一致就会触发startsWith判断失败。Android 10及更早版本中getExternalFilesDir返回的路径字符串本身就是真实路径,不会出现该问题。
  • Zip文件名编码解析逻辑变更
    Android 11(API 30)修改了ZipInputStream的默认文件名编码为UTF-8,不再兼容旧的GBK等编码格式。如果你的内置Zip或者下载的Zip文件是用非UTF-8编码打包的,Android 11解析出来的ZipEntry#getName()会出现乱码,乱码内容可能包含../等路径跳转字符,拼接后得到的目标文件路径不在目标目录范围内,触发异常。
  • 多用户/工作Profile路径规则变更
    Android 11对多用户、工作Profile的存储路径做了调整,这类场景下getExternalFilesDir返回的路径前缀和getCanonicalPath解析后的路径前缀规则不同,导致前缀匹配失败。普通单用户场景下不会触发该问题,所以你用常规模拟器无法复现。
  • 静态缓存路径失效
    你代码中把externalFilesDir设为静态变量做缓存,如果应用运行过程中用户手动修改了存储权限、切换了工作 profile,Android 11会返回新的存储路径,但你的缓存中还是旧的路径,导致路径匹配失败。
  • 定制ROM路径规则差异
    部分厂商定制的Android 11系统对存储路径的格式化规则做了修改,getCanonicalPath返回的路径格式和原生系统不一致,导致前缀匹配逻辑失效。

内容的提问来源于stack exchange,提问作者Cheok Yan Cheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:03