android面试(5)-WebView安全漏洞

WebView是android提供的一个非常强大的控件,具体的怎样去使用网上有很多教程,在这里就不多讲,我今天只讲讲使用WebView要注意的一些问题;

1.常见的一些坑:

(1)Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确闲置使用WebView.addJava

scriptInterface()方法,远程攻击者可通过使用反射机制利用该漏洞执行任意java对象的方法

(2)webView写在其他容器时,销毁webview时,需要先将容器中的webview,remove之后,在调用webview.removeallViews和webview.onDestory()才能真正销毁不会导致内存泄露问题。

(3)jsbridge:让本地native端调用远程js代码,也可以逆向使用;

(4)当页面加载完成时会回调webviewClient.onPageFinished()方法,这个方法会判断当前页面有没有被加载完毕,但是当你发生页面跳转的时候,这个方法会被调用无数次,所以当你的webview需要加载各种网页,并且需要在网页上操作时,调用WebChromeClient.onProgressChanged方法更好;

(5)后台耗电问题,由于WebView加载网页时,会单独开启一个线程,所以如果webview没有被彻底销毁的话,会导致你的App耗电量居高不下,可以在Activity中的onDestroy()方法中直接调用System.exit()方法直接将虚拟机关闭;

(6)webView硬件加速导致页面渲染问题,易导致页面白块,解决方法是暂时关闭硬件加速;

2.关于webView的内存泄露问题:

为什么会有内存泄露问题?

主要是因为webview内部会开启一个新线程,而webview又依赖于Activity存在,Activity和新线程的生命周期不同,新线程可能一直存在,这就可能导致webview一直持有Activity的引用,使activity无法被回收,导致内存泄露;

解决方法:

(1)独立进程 ,简单暴力,但是涉及到进程间通信,比较麻烦;

(2)动态添加webview,对传入webview中的context使用弱引用

它的意思就是在布局中创建一个viewGroup用来防止webview,当Activity被创建时,将webview添加进来,在Activit销毁时remove掉

转自:https://blog.csdn.net/pgg_cold/article/details/79393594

WebView是android提供的一个非常强大的控件,具体的怎样去使用网上有很多教程,在这里就不多讲,我今天只讲讲使用WebView要注意的一些问题;

1.常见的一些坑:

(1)Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确闲置使用WebView.addJava

scriptInterface()方法,远程攻击者可通过使用反射机制利用该漏洞执行任意java对象的方法

(2)webView写在其他容器时,销毁webview时,需要先将容器中的webview,remove之后,在调用webview.removeallViews和webview.onDestory()才能真正销毁不会导致内存泄露问题。

(3)jsbridge:让本地native端调用远程js代码,也可以逆向使用;

(4)当页面加载完成时会回调webviewClient.onPageFinished()方法,这个方法会判断当前页面有没有被加载完毕,但是当你发生页面跳转的时候,这个方法会被调用无数次,所以当你的webview需要加载各种网页,并且需要在网页上操作时,调用WebChromeClient.onProgressChanged方法更好;

(5)后台耗电问题,由于WebView加载网页时,会单独开启一个线程,所以如果webview没有被彻底销毁的话,会导致你的App耗电量居高不下,可以在Activity中的onDestroy()方法中直接调用System.exit()方法直接将虚拟机关闭;

(6)webView硬件加速导致页面渲染问题,易导致页面白块,解决方法是暂时关闭硬件加速;

2.关于webView的内存泄露问题:

为什么会有内存泄露问题?

主要是因为webview内部会开启一个新线程,而webview又依赖于Activity存在,Activity和新线程的生命周期不同,新线程可能一直存在,这就可能导致webview一直持有Activity的引用,使activity无法被回收,导致内存泄露;

解决方法:

(1)独立进程 ,简单暴力,但是涉及到进程间通信,比较麻烦;

(2)动态添加webview,对传入webview中的context使用弱引用

它的意思就是在布局中创建一个viewGroup用来防止webview,当Activity被创建时,将webview添加进来,在Activit销毁时remove掉

猜你喜欢

转载自blog.csdn.net/u013651026/article/details/87882577