Webview资源预加载
在Android 的BaseApplication里初始化一个WebView对象(用于加载常用的H5页面资源);当需使用这些页面时再从BaseApplication里取过来直接使。提早加载将需使用的H5页面,即提前构建缓存。
一个加载网页的过程中,native、网络、后端处理、CPU都会参与,各自都有必要的工作和依赖关系;让他们相互并行处理而不是相互阻塞才可以让网页加载更快:
①WebView初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。
②后端处理慢,可以让服务器分trunk输出,在后端计算的同时前端也加载网络静态资源。
③脚本执行慢,就让脚本在最后运行,不阻塞页面解析。
④同时,合理的预加载、预缓存可以让加载速度的瓶颈更小。
⑤WebView初始化慢,就随时初始化好一个WebView待用。
⑥DNS和链接慢,想办法复用客户端使用的域名和链接。
⑦脚本执行慢,可以把框架代码拆分出来,在请求页面之前就执行好。
WebView中,主要漏洞有三类:
任意代码执行漏洞:
原因有三个:(Google 在Android 4.2 版本中规定对被调用的函数以 @JavascriptInterface进行注解从而避免漏洞攻击;android 4.2之前我们不用去关心了)
(1)WebView 中 addJavascriptInterface() 接口
(2)WebView 内置导出的 searchBoxJavaBridge_对象
(3)WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象
密码明文存储漏洞:
WebView默认开启密码保存功能。开启后,在用户输入密码时,会弹出提示框:询问用户是否保存密码;如果选择”是”,密码会被明文保到 /data/data/com.package.name/databases/webview.db 中,这样就有被盗取密码的危险
解决方案
关闭密码保存提醒,WebSettings.setSavePassword(false)。
域控制不严格漏洞:
即 A 应用可以通过 B 应用导出的 Activity 让 B 应用加载一个恶意的 file 协议的 url,从而可以获取 B 应用的内部私有文件,从而带来数据泄露威胁。
解决方案