Android:你所忽略 WebView 带来的那些安全漏洞(总结)
2017-05-08 08:29
1361 查看
WebView是一个基于webkit引擎、展现web页面的控件。它功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。但是在使用的同时也埋下了一些安全隐患和内存泄漏,接下来以此篇文章作简单总结:
注意: 容易忽视的一点,当我们在初始化布局时,如果是调用
解决方法:所以当你的WebView需要加载各种网页并且需要在网页上完成一些操作时,推荐使用WebView 的
解决方法:这里提供一个方法,有些暴力,仅做思考:在Activity的
解决方法:设置WebView暂时关闭硬件加速。
此方法
(1)独立进程
此方法简单暴力,就是开启单独一个进程给WebView,不过可能涉及到进程间通信,这会比较麻烦。
此方法在过程中用处较多,WebView使用完后直接干掉此进程,使app的主进程减少一些内存容量。
(2)动态添加WebView,对传入WebView中使用的Context使用弱引用
动态添加WebView是指在布局外创建一个ViewGroup来防止WebView,通过代码在创建Activity时将WebView添加add进来。不仅如此,开头已经提到过,在销毁WebView时,即Activity的
一. WebView常见的一些坑
1.动态添加WebView带来的 内存泄漏
一般在使用WebView都是写在容器中,例如RelativeLayout、LinerLayout。为避免内存泄漏,在使用完后,会调用以下方法来销毁WebView:webView.removeAllViews(); webView.destroy();
注意: 容易忽视的一点,当我们在初始化布局时,如果是调用
addView方法即动态添加WebView到布局文件中时,需要先将布局中的WebView先remove出来,再调用Webview的两个方法来销毁自己。这样才能真正的销毁WebView对象,避免内存泄漏。
2. WebView的 onPageFinished方法
问题描述: WebView加载的页面完成时会回调onPageFinished方法,但是此方法有很多坑,它会判断此网页是否真的加载完毕,若此时在加载过程中产生跳转,此方法会被调用无数次。
解决方法:所以当你的WebView需要加载各种网页并且需要在网页上完成一些操作时,推荐使用WebView 的
onProgressChanged方法,此方法相较于之前的更为稳定、靠谱。
3. WebView带来的 后台耗电隐患
问题描述:当我们使用到WebView加载网页时,WebView会自己开启线程,如果在使用完后没有彻底销毁,这些残余的线程会一直在后台运行导致应用程序大幅度耗电。解决方法:这里提供一个方法,有些暴力,仅做思考:在Activity的
onDestory方法中调用
System.exit直接把虚拟机关闭。
4. WebView硬件加速导致 页面渲染问题
问题描述:硬件加速开始于Android 系统3.0,开启硬件加速后,WebView渲染页面加速,拖动起来效果更加顺滑。但是这里有一个问题,容易出现加载页面白块、界面闪烁的现象。解决方法:设置WebView暂时关闭硬件加速。
5. jsbridge
其实jsbridge不算是一个坑,在此简介其概念:它通过JavaScript来构建桥,桥的其中一端是Web端,另一端是客户端native,而搭桥的目的是为了本地native端调用Web的js代码,同时Web端可以调用本地native代码,仅做了解即可。6. WebView 的 addJavascriptInerface方法带来的 安全漏洞
Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInerface方法,远程攻击者可通过使用 Java Reflection API 利用该漏洞执行任意Java对象的方法。
此方法
addJavascriptInerface给WebView加入了一个Javascript桥接口,而此桥接口可以通过调用来操纵本地的Java接口。这是前几年WebView出现问题十分显著的一次,攻击者利用反射机制调用未注册的其它Java类,导致操纵JavaScript能力无限增强,攻击者利用此漏洞对客户端任意篡改,甚至进行违法行为。
二. 有关 WebView 的内存泄漏问题
1. 内存泄漏的 根本原因
WebView的使用会关联一个Activity,而WebView执行的操作是在新的线程中,Activity的生命周期和这些新线程的生命周期不同,导致WebView一直持有Activity的引用,不能回收!其中原理与匿名内部类持有外部类引用导致外部类无法回收 一样。2. 解决方法
为避免此现象,有以下两个方法:(1)独立进程
此方法简单暴力,就是开启单独一个进程给WebView,不过可能涉及到进程间通信,这会比较麻烦。
此方法在过程中用处较多,WebView使用完后直接干掉此进程,使app的主进程减少一些内存容量。
(2)动态添加WebView,对传入WebView中使用的Context使用弱引用
动态添加WebView是指在布局外创建一个ViewGroup来防止WebView,通过代码在创建Activity时将WebView添加add进来。不仅如此,开头已经提到过,在销毁WebView时,即Activity的
onDestory方法中,先将WebView从Activity的布局中remove掉,再调用webView的销毁方法。
相关文章推荐
- android安全之webview远程代码执行漏洞
- Android WebView漏洞总结
- android WebView详解,常见漏洞详解和安全源码(上)
- Android:为WebView中的Java与JavaScript的交互漏洞提供【安全可靠】的多样互通方案
- 【Android安全】WebView密码明文保存漏洞
- Android静态安全检测 -> WebView组件远程代码执行漏洞检测
- Android WebView 安全漏洞
- Android安全开发之WebView漏洞及建议
- android WebView详解,常见漏洞详解和安全源码(上)
- Android 安全--WebView不校验证书漏洞
- android WebView详解,常见漏洞详解和安全源码
- android面试(5)-WebView安全漏洞
- Android安全之WebViewUXSS漏洞
- Android静态安全检测 -> WebView系统隐藏接口漏洞检测
- Android为WebView中的Java与JavaScript的交互漏洞提供安全可靠的多样互通方案
- Android安全之WebViewUXSS漏洞
- Android WebView 安全漏洞解决方案
- Android安全--webview远程代码执行漏洞
- Android静态安全检测 -> WebView忽略SSL证书错误检测
- Android静态安全检测 -> WebView File域同源策略绕过漏洞