博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android WebView安全方面的一些坑
阅读量:6413 次
发布时间:2019-06-23

本文共 2316 字,大约阅读时间需要 7 分钟。

公司一款app有将近两年没有更新了,虽然用户量不大,但是因为与第三方有合作,出现问题时需要进行维护;没想到最近第三方对他们所有的软件进行了网络安全扫描,这款Android app也未能幸免...

因为app是13年左右开发的,维护也只是到16、17年左右就终止了,所以,扫描出不少漏洞;因为是采用了webview+html混合开发,因此,需要解决一些webview相关的问题:

一、webview隐藏接口问题(任意命令执行漏洞)

android webview组件包含3个隐藏的系统接口:searchBoxJavaBridge_, accessibilityTraversal以及accessibility,恶意程序可以通过反射机制利用它们实现远程代码执行;该问题在Android4.4以下版本出现。 于是,在Android3.04.4之间的版本,我们通过移除这些隐藏接口,来解决该问题:

// 19  4.4  Build.VERSION.KITKAT    // 11  3.0  Build.VERSION_CODES.HONEYCOMB    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB         && Build.VERSION.SDK_INT < 19 && webView != null) {         webView.removeJavascriptInterface("searchBoxJavaBridge_");        webView.removeJavascriptInterface("accessibility");        webView.removeJavascriptInterface("accessibilityTraversal");    }复制代码

二、addJavascriptInterface任何命令执行漏洞

webview中使用jshtml进行交互是一个不错的方式,但是,在Android4.2(16,包含4.2)及以下版本中,如果使用addJavascriptInterface,则会存在被注入js接口的漏洞;在4.2之后,由于Google增加了@JavascriptInterface,该漏洞得以解决。

解决该问题,最彻底的方式是在4.2以下放弃使用addJavascriptInterface,采用onJsPrompt或其它方法替换。或者使用一些方案来降低该漏洞导致的风险:如使用https并进行证书校验,如果是http则进行页面完整性校验,如上面所述移除隐藏接口等。

public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {        result.confirm(CGJSBridge.callJava(view, message));        Toast.makeText(view.getContext(),"message="+message,Toast.LENGTH_LONG).show();        return true;    }复制代码

三、绕过证书校验漏洞

webviewClient中有onReceivedError方法,当出现证书校验错误时,我们可以在该方法中使用handler.proceed()来忽略证书校验继续加载网页,或者使用默认的handler.cancel()来终端加载。 因为我们使用了handler.proceed(),由此产生了该“绕过证书校验漏洞”。 如果确定所有页面都能满足证书校验,则不必要使用handler.proceed()

@SuppressLint("NewApi")    @Override    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {        //handler.proceed();// 接受证书        super.onReceivedSslError(view, handler, error);    }复制代码

四、allowFileAccess导致的File域同源策略绕过漏洞

如果webview.getSettings().setAllowFileAccess(boolean)设置为true,则会面临该问题;该漏洞是通过WebViewJavascript的延时执行和html文件替换产生的。 解决方案是禁止WebView页面打开本地文件,即

webview.getSettings().setAllowFileAccess(false);复制代码

或者更直接的禁止使用JavaScript

webview.getSettings().setJavaScriptEnabled(false);复制代码

由于业务上的原因,这个解决方案其实并不怎么理想,如果有更好的解决方案,欢迎指教!

原文: 博客: 

这是都是关于WebView网络安全的问题,其他非安全漏洞方面的坑这里就不多说~

做开发越久,越觉得自己不会的太多;如果文中有错误之处,麻烦指出,多谢!

转载于:https://juejin.im/post/5c7b6de56fb9a049dc02f7b0

你可能感兴趣的文章
Sequelize 数据库的支持
查看>>
BigDecimal类的加减乘除
查看>>
node.js发送邮件email
查看>>
查看nginx配置文件路径的方法
查看>>
接口性能调优方案探索
查看>>
kali安装包或更新时提示“E: Sub-process /usr/bin/dpkg return”
查看>>
网站管理后台模板 Charisma
查看>>
EL:empty的用法
查看>>
Saltstack配置之 nodegroups
查看>>
Servlet和JSP优化经验总结
查看>>
squid使用rotate轮询(分割)日志
查看>>
VS2015安装EF Power Tools
查看>>
MySQL主从复制(笔记)
查看>>
keepalived高可用集群的简单配置
查看>>
Android Java Framework显示Toast(无Activity和Service)
查看>>
通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
查看>>
NavigationController修改状态条颜色
查看>>
16大跨平台游戏引擎
查看>>
NPS如何配置基于mac地址的8021x认证
查看>>
XenServer架构之XAPI的调用流程
查看>>