WebView应用因Intent Scheme漏洞遭Google Play拒审,求排查shouldOverrideUrlLoading相关问题
WebView应用因Intent Scheme漏洞遭Google Play拒审,求排查shouldOverrideUrlLoading相关问题
兄弟,我太懂这种被拒审又摸不着头脑的憋屈了!你的情况我之前帮朋友排查过几乎一模一样的,核心就是Google对WebView处理Intent Scheme的安全要求卡得特别严,尤其是shouldOverrideUrlLoading这个方法,稍不留神就会踩“Intent Scheme Hijacking”的坑。
先给你掰扯清楚为啥Google会卡这个:简单说就是如果你的WebView没做严格限制,恶意网页可以通过构造特殊的intent://链接,唤起你App里的敏感组件,甚至跳转到其他恶意App,Google怕这个风险会坑到用户,所以直接拒审。
接下来给你列几个shouldOverrideUrlLoading里最容易踩的坑,你对着自己的代码排查就行:
- 没做任何限制就直接跳转Intent:比如你是不是拿到网页传的链接,不管是不是
intent://开头,直接就调用startActivity(intent)了?这种写法绝对会被Google的检测工具揪出来,恶意链接随便就能劫持跳转。 - 没过滤非HTTP/HTTPS的Scheme:WebView本来就该主要处理网页链接(HTTP/HTTPS),其他Scheme(比如intent、market、tel这些)都要严格管控。如果是你业务必须要处理的(比如跳应用市场评分),一定要加白名单,只允许你明确信任的Scheme和目标包名。
- 没验证Intent的跳转目标:哪怕是合法的Intent Scheme,也要检查跳转的组件是不是你自己App的,或者是你完全信任的第三方App。比如不能随便让一个Intent跳去陌生包名的App,这就是劫持风险。
- 重载方法没全覆盖:别忘了
shouldOverrideUrlLoading有两个版本(适配不同Android版本),如果你的App兼容低版本,两个方法都要加同样的安全逻辑,不能只写新的那个。
给你贴个我常用的安全写法参考,你可以对照着改自己的代码:
@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); return handleUrlLoading(url); } // 兼容旧版本的重载方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return handleUrlLoading(url); } private boolean handleUrlLoading(String url) { // 优先处理HTTP/HTTPS链接,让WebView正常加载 if (url.startsWith("http://") || url.startsWith("https://")) { return false; } // 处理其他Scheme的情况 if (url.startsWith("intent://")) { try { Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); // 只允许跳转到自己App的组件,替换成你的包名 if (intent.getComponent() != null && "com.your.app.package".equals(intent.getComponent().getPackageName())) { startActivity(intent); } else { // 非信任的Intent直接拦截,给用户提示 Toast.makeText(this, "无法打开该链接", Toast.LENGTH_SHORT).show(); } } catch (URISyntaxException e) { e.printStackTrace(); // 解析失败直接拦截 return true; } return true; } // 其他非必要的Scheme全部拦截 Toast.makeText(this, "无法打开该链接", Toast.LENGTH_SHORT).show(); return true; }
你先把自己的shouldOverrideUrlLoading逻辑按这个思路理一遍,把所有非白名单内的Intent跳转都堵住,再提交应该就能过审了。毕竟Google的检测工具就是模拟各种恶意链接来试探你的WebView安全逻辑,只要逻辑严谨就没问题。
备注:内容来源于stack exchange,提问作者Nullfi
相关产品推荐
相关产品推荐

