Webview資源預(yù)加載
在Android?的BaseApplication里初始化一個(gè)WebView對象(用于加載常用的H5頁面資源);當(dāng)需使用這些頁面時(shí)再從BaseApplication里取過來直接使。提早加載將需使用的H5頁面,即提前構(gòu)建緩存。

一個(gè)加載網(wǎng)頁的過程中,native、網(wǎng)絡(luò)、后端處理、CPU都會(huì)參與,各自都有必要的工作和依賴關(guān)系;讓他們相互并行處理而不是相互阻塞才可以讓網(wǎng)頁加載更快:
①WebView初始化慢,可以在初始化同時(shí)先請求數(shù)據(jù),讓后端和網(wǎng)絡(luò)不要閑著。
②后端處理慢,可以讓服務(wù)器分trunk輸出,在后端計(jì)算的同時(shí)前端也加載網(wǎng)絡(luò)靜態(tài)資源。
③腳本執(zhí)行慢,就讓腳本在最后運(yùn)行,不阻塞頁面解析。
④同時(shí),合理的預(yù)加載、預(yù)緩存可以讓加載速度的瓶頸更小。
⑤WebView初始化慢,就隨時(shí)初始化好一個(gè)WebView待用。
⑥D(zhuǎn)NS和鏈接慢,想辦法復(fù)用客戶端使用的域名和鏈接。
⑦腳本執(zhí)行慢,可以把框架代碼拆分出來,在請求頁面之前就執(zhí)行好。

WebView中,主要漏洞有三類:
任意代碼執(zhí)行漏洞:
原因有三個(gè):(Google 在Android 4.2 版本中規(guī)定對被調(diào)用的函數(shù)以?@JavascriptInterface進(jìn)行注解從而避免漏洞攻擊;android 4.2之前我們不用去關(guān)心了)
? ?(1)WebView 中 addJavascriptInterface() 接口
? ?(2)WebView 內(nèi)置導(dǎo)出的 searchBoxJavaBridge_對象
? ?(3)WebView 內(nèi)置導(dǎo)出的 accessibility 和 accessibilityTraversalObject 對象
密碼明文存儲漏洞:
WebView默認(rèn)開啟密碼保存功能。開啟后,在用戶輸入密碼時(shí),會(huì)彈出提示框:詢問用戶是否保存密碼;如果選擇”是”,密碼會(huì)被明文保到 /data/data/com.package.name/databases/webview.db 中,這樣就有被盜取密碼的危險(xiǎn)
解決方案
關(guān)閉密碼保存提醒,WebSettings.setSavePassword(false)。
域控制不嚴(yán)格漏洞:
即 A 應(yīng)用可以通過 B 應(yīng)用導(dǎo)出的 Activity 讓 B 應(yīng)用加載一個(gè)惡意的 file 協(xié)議的 url,從而可以獲取 B 應(yīng)用的內(nèi)部私有文件,從而帶來數(shù)據(jù)泄露威脅。
解決方案
