webview安全漏洞详解
-
1.Webview常见的一些坑
- Android API level 16 以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法
- webview在布局文件中的使用,webview写在其他容器中时,当离开界面时,需要销毁webView,在onDestroy时,一定要先将webview从容器中remove,然后再调用webview的removeAllViews,和webView的ondestroy方法才不会导致内存泄露问题
- jsbridge
通过js构建桥,为了让native调用远端js的代码,也可以让js代码调用native代码
- jsbridge
- webViewClient.onPageFinished-->WebChromeClient.onProgessChanged
onPageFinished:加载完成时会回调这个方法。检测当前网页是否加载完毕。如果当前网页产生跳转,这个方法会执行无数次,当webview需要加载各种网页,并且在网页上有一些操作时,最好还是调用WebChromeClient.onProgessChanged()方法,这方法靠谱些
- webViewClient.onPageFinished-->WebChromeClient.onProgessChanged
- 后台耗电:性能优化,当程序开webView加载网页时,webview会自己开启线程,如果没有很好的将webview销毁的话,这个残留的线程就会一直在后台运行,而导致应用程序居高不下。
粗暴处理:在onDetroy时直接调用system.exit直接把虚拟机关闭
- 后台耗电:性能优化,当程序开webView加载网页时,webview会自己开启线程,如果没有很好的将webview销毁的话,这个残留的线程就会一直在后台运行,而导致应用程序居高不下。
- WebView硬件加速导致页面渲染问题
容易出现页面加载白块,页面闪烁的现象
处理:设置WebView暂时关闭硬件加速
- WebView硬件加速导致页面渲染问题
-
2.关于webView的内存泄露问题
- WebView加载会创建自己的线程,这个线程跟Activity的生命周期是未绑定,无法控制。 跟匿名内部类引用,导致外部内无法回收相似。
独立进程,简单暴力,不过可能涉及到进程间通信(用的多,防止内存泄露,减轻主进程的内存压力)
动态添加WebView,对传入WebView中使用的Context使用弱引用,动态添加WebView的意思是布局创建一个ViewGroup用来放置WebView,Activity创建时add进来,在Activity停止时remove掉