Webview常见的一些坑

一、远程代码执行漏洞

Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口。
Android API level 小于17 (即Android 4.2之前的系统版本)受此影响,方法是WebView.addJavascriptInterface(Object obj, String interfaceName)

原理:Android系统通过WebView.addJavascriptInterface方法注册可供JavaScript调用的Java对象,以用于增强JavaScript的功能。但是系统并没有对注册Java类的方法调用的限制。导致攻击者可以利用反射机制调用未注册的其它任何Java类,最终导致JavaScript能力的无限增强。攻击者利用该漏洞可以根据客户端能力为所欲为。

二、webview内存泄漏

webview在布局xml文件中使用时容易导致内存泄漏,所以需要用webview的时候最好是在代码中动态使用,需要的context最好是applicationContext。
如果是在布局xml文件中使用的,一定要在Activity销毁的时候,先让WebView加载null,然后从根布局中移除,然后在销毁,最后制空。

@Override  
protected void onDestroy() {  
if (mWebView != null) {  
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);  
mWebView.clearHistory();  
((ViewGroup) mWebView.getParent()).removeView(mWebView);  
mWebView.destroy();  
mWebView = null;  
}  
super.onDestroy(); 
}

三、WebViewClient.onPageFinished()

当前正在加载的网页产生跳转的时候这个方法可能会被多次调用,
所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可以在WebChromeClient.onProgressChanged()中处理原本用WebViewClient.onPageFinished()执行的操作。

四、webview后台耗电问题

启用webview后,webview会在后台自己启动线程,所以在webview使用完后得回收,还可以在Activity.onDestroy()中直接调用System.exit(0)简单粗暴的将应用程序完全被移出虚拟机。

发布了29 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sushineboy/article/details/78501722