Android WebView安全方面的坑
公司一款app有将近两年没有更新了,虽然用户量不大,但是因为与第三方有合作,出现问题时需要进行维护;没想到最近第三方对他们所有的软件进行了网络安全扫描,这款
Android app
也未能幸免…
因为app
是13年左右开发的,维护也只是到16、17
年左右就终止了,所以,扫描出不少漏洞;因为是采用了webview html
混合开发,因此,需要解决一些webview
相关的问题:
一、webview隐藏接口问题(任意命令执行漏洞)
android webview
组件包含3个隐藏的系统接口:searchBoxJavaBridge_
, accessibilityTraversal
以及accessibility
,恶意程序可以通过反射机制利用它们实现远程代码执行;该问题在Android4.4
以下版本出现。 于是,在Android3.0
到4.4
之间的版本,我们通过移除这些隐藏接口,来解决该问题:
// 194.4Build.VERSION.KITKAT// 113.0Build.VERSION_CODES.HONEYCOMBif(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
中使用js
与html
进行交互是一个不错的方式,但是,在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")@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {//handler.proceed();// 接受证书super.onReceivedSslError(view, handler, error);}
四、allowFileAccess导致的File域同源策略绕过漏洞
如果webview.getSettings().setAllowFileAccess(boolean)
设置为true
,则会面临该问题;该漏洞是通过WebView
对Javascript
的延时执行和html文件替换产生的。 解决方案是禁止WebView
页面打开本地文件,即
webview.getSettings().setAllowFileAccess(false);
或者更直接的禁止使用JavaScript
webview.getSettings().setJavaScriptEnabled(false);
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfacje
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01