公司一款app有将近两年没有更新了,虽然用户量不大,可是由于与第三方有合做,出现问题时须要进行维护;没想到最近第三方对他们全部的软件进行了网络安全扫描,这款
Android app
也未能幸免...html
由于app
是13年左右开发的,维护也只是到1六、17
年左右就终止了,因此,扫描出很多漏洞;由于是采用了webview+html
混合开发,所以,须要解决一些webview
相关的问题:android
android webview
组件包含3个隐藏的系统接口:searchBoxJavaBridge_
, accessibilityTraversal
以及accessibility
,恶意程序能够经过反射机制利用它们实现远程代码执行;该问题在Android4.4
如下版本出现。 因而,在Android3.0
到4.4
之间的版本,咱们经过移除这些隐藏接口,来解决该问题:web
// 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");
}
复制代码
在webview
中使用js
与html
进行交互是一个不错的方式,可是,在Android4.2(16,包含4.2)
及如下版本中,若是使用addJavascriptInterface
,则会存在被注入js接口的
漏洞;在4.2
以后,因为Google
增长了@JavascriptInterface
,该漏洞得以解决。安全
解决该问题,最完全的方式是在4.2
如下放弃使用addJavascriptInterface
,采用onJsPrompt
或其它方法替换。或者使用一些方案来下降该漏洞致使的风险:如使用https
并进行证书校验,若是是http
则进行页面完整性校验,如上面所述移除隐藏接口等。bash
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);
}
复制代码
若是webview.getSettings().setAllowFileAccess(boolean)
设置为true
,则会面临该问题;该漏洞是经过WebView
对Javascript
的延时执行和html文件替换产生的。 解决方案是禁止WebView
页面打开本地文件,即app
webview.getSettings().setAllowFileAccess(false);
复制代码
或者更直接的禁止使用JavaScript
ide
webview.getSettings().setJavaScriptEnabled(false);
复制代码
因为业务上的缘由,这个解决方案其实并不怎么理想,若是有更好的解决方案,欢迎指教!ui
原文:简书ThinkinLiu 博客: IT老五url
这是都是关于
WebView
网络安全的问题,其余非安全漏洞方面的坑这里就很少说~作开发越久,越以为本身不会的太多;若是文中有错误之处,麻烦指出,多谢!