開啟 Android WebView 的安全瀏覽模式

2021-02-15 安卓筆記俠

Hybrid App(混合式開發)已經是每一個商業應用都會使用的開發手段。其最大的優勢就是將一些可動態更新的內容頁面使用 H5 開發,然後借用移動端原生系統提供的 WebView 控制項加載進來。這種方式不僅能夠節約安卓和 iOS 兩個客戶端的開發人力成本,還能在避免應用版本迭代的情況下動態更新頁面內容。然而,WebView 有一個弊端,就是始終無法避免的安全問題。

比如,你連接的 WI-FI 可能會被一些網絡運營商惡意攔截 DNS 系統,當你打開應用的 WebView 時,會在頁面底部或者其他地方看到莫名其妙的廣告內容。更有甚者,直接重定向到其他網頁,對應用或者設備隨意操作,存在很大的安全隱患。

Google 一直也在致力於處理這個問題。最近,就有了一些進展。根據 Android Developers 官方博客介紹,從 Android O 開始,WebView 將採用獨立於託管應用之外的進程來進行渲染器,提供隔離空間。

這種做法與 Chrome 瀏覽器類似,使得 WebView 擁有兩級隔離:

WebView 渲染引擎剝離出獨立進程。這樣,也就不會存在由於 WebView 的加載錯誤導致我們的主應用發生崩潰問題,而且第三方惡意網站也很難通過渲染器攻擊託管應用。

在隔離的進程沙盒中運行的渲染器進程,被限制使用設備資源。比如,渲染器不能自行向磁碟寫入數據,或者進行網絡通信等。這種隔離能夠進一步防禦惡意攻擊。

安全瀏覽模式下的最新版 WebView 還集成了 Google 安全瀏覽機制,來保護和提醒用戶可能存在風險的網站。啟用安全瀏覽配置後,WebView 將參考安全瀏覽的惡意軟體和釣魚網站資料庫檢查訪問的 URLs 地址,在用戶打開之前給予危險提示,如:

講到這裡,你可能就要問了,如何啟動 WebView 安全瀏覽呢?很簡單,在我們應用的 Manifest 清單文件中按照下面的代碼簡單配置一下,便可以讓當前 App 中使用到的所有 WebView 都能支持安全瀏覽:

<manifest>
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
...
<application> ... </application>
</manifest>

由於 WebView 作為一個獨立的 APK 被分發使用的,截至目前,Android 5.0 及以上系統的設備已經可以支持 WebView 安全瀏覽。而你只需要在清單文件中添加如上配置代碼,便可以讓你的混合式開發的應用更加安全。

文章備註:本文中部分內容翻譯自安卓開發者官方博客,參考連結(需要翻牆):What’s new in WebView security。

相關拓展內容:

隨心而賞~

相關焦點

  • Android WebView 研究筆記
    重新讀了下谷歌文檔-遠程調試 WebView需要在應用中開啟WebViewDebugable模式才行,也就是說默認不開啟嘍。使用VXP強制開始WebView那有沒有強制開啟的方法呢?很快谷歌出來一篇文章強制開啟android webview debug模式使用Chrome inspect看來手機需要Root才行,還用到了高端的Xposed(不對呀,我明明記得可以不用root的呀),繼續谷歌了下發現還有個VirtualXposed可以不用root相關的VirtualXposed(簡稱VXP)簡介 https://github.com/android-hacker
  • Android WebView簡單整理
    記得第一次用webview的時候,就會個loadUrl,最近想著自己寫個簡單瀏覽器玩玩,發現了一些問題,於是寫一篇文章,文章分兩大類,一類為使用
  • Android Webview知識點和遇到過的坑全總結
    WebView初始化及加載URL   1、通過XML初始化:<WebView    android:id="@+id/webview"    android:layout_width="fill_parent"    android:layout_height
  • Android中使用WebView與JS交互全解析
    另外出於用戶習慣上的考慮 需要將WebView表現得更像一個瀏覽器,也就是需要可以回退歷史記錄,因此需要覆蓋系統的回退鍵 goBack,goForward可向前向後瀏覽歷史頁面 ; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.webkit.JavascriptInterface
  • App自動化測試 | Android WebView測試
    WebView測試環境準備手機端PC端查看手機瀏覽器版本adb shell pm list package | grep webviewadb shell pm dump com.android.browser
  • WebView詳解與簡單實現Android與H5互調
    給webview加入監聽webview.setDownloadListener(new MyDownloadListenter());返回上一瀏覽頁面,通過重寫onKeyDown方法實現點擊返回鍵返回上一瀏覽頁面而非退出程序
  • Android WebView:性能優化不得不說的事
    簡單的介紹完了上面六種 H5 常用的緩存模式,想必大家能對 Android WebView 所支持的緩存模式有個粗略的了解。在一次使用微信瀏覽訂閱公眾號文章的過程中,發現微信的 H5 頁面有一行 『QQ 瀏覽器 X5 內核提供技術支持』。順著這個線索我就找到了騰訊瀏覽服務。發現騰訊已經把這個功能開放了,而且集成的 SDK 很小只有212 KB。這是很驚人的,通過介紹才發現這個 SDK 是可以共享微信和手機 QQ 的 X5 內核。
  • 全面總結WebView遇到的坑及優化
    ;MIXED_CONTENT_NEVER_ALLOW 不允許Https加載Http的內容,即不允許從安全的起源去加載一個不安全的資源;MIXED_CONTENT_COMPLTIBILITY_MODE 當涉及到混合式內容時,WebView會嘗試去兼容最新Web瀏覽器的風格;另外:在認證證書不被Android所接受的情況下,我們可以通過設置重寫
  • WebView的坑別嫌多
    通過webview的loadUrl注意:該方式必須在webview加載完畢之後才能調用,也就是webviewClient的onPageFinished()方法回調之後,而且該方法的執行 會刷新界面,效率較低js代碼:function callJs(){
  • Android Webview使用和遇到過的坑總結
    :name="android.permission.INTERNET" />        默認情況下,WebView不支持JavaScript,web頁面的錯誤也會被忽略,如果只是用Webview來顯示網頁而不用交互,默認配置就可以了,如果需要交互,就需要自定義配置了。
  • Android如何獲取WebView內容高度
    ><com.trs.studyview.view.TRSScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView"
  • Android 5.1 WebView內存洩漏分析
    的界面,退出後,這個activity都不會被釋放,activity的實例會被持有,由於我們項目中經常會用到瀏覽web頁面的地方,可能引起內存積壓,導致內存溢出的現象,所以這個問題還是比較嚴重的。引起的內存洩漏,而且能看到是在 org.chromium.android_webview.AwContents 類中,難道是這個類註冊了component callbacks,但是未反註冊?
  • Android爬坑之旅之WebView
    具體的注入方式,我找了篇博客,如果有不清楚的同學可以了解下:Android WebView的Js對象注入漏洞解決方案在之前烏雲平臺報出的漏洞中,android/webkit/webview中默認內置的一個searchBoxJavaBridge_ 接口同時存在遠程代碼執行漏洞在於android/webkit/AccessibilityInjector.java
  • Android WebView詳解,常見漏洞詳解和安全源碼
    接著還有 WebView 的幾種緩存模式:不使用網絡,只讀取本地緩存數據;根據 cache-control 決定是否從網絡上取數據;API level 17 中已經廢棄, 從 API level 11 開始作用同 LOAD_DEFAULT 模式 ;不使用緩存,只從網絡獲取數據;只要本地有,無論是否過期,或者 no-cache
  • 用安卓 WebView 做一個「套殼」應用
    -- 展示一個 WebView --><WebView    android:id="@+id/webview"    android:layout_width="match_parent"    android:layout_height="match_parent" />在 Android 工程中,「app
  • 還在用Android自帶的WebView組件?太Out了!
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />        <uses-permission android:name="android.permission.INTERNET" />        <uses-permission android
  • Android:手把手教你構建 全面的WebView 緩存機制 & 資源加載方案
    離線瀏覽:用戶可在沒有網絡連接時進行H5頁面訪問提高頁面加載速度 & 減少流量消耗:直接使用已緩存的資源,不需要重新加載具體應用此處講解主要講解 前端H5的緩存機制 的緩存機制 & 緩存模式 :a. 緩存機制:如何將加載過的網頁數據保存到本地b.
  • Android WebView那些坑之上傳文件
    無奈去翻WebChromeClient的源碼,發現openFileChooser()是系統API,我們的release包是開啟了混淆的,所以在打包的時候混淆了openFileChooser(),這就導致無法回調openFileChooser()了。/** * Tell the client to open a file chooser.
  • 你真的了解webview麼?
    另外,還有一些網絡機頂盒裡的交互,也是webview在和我們打交道,比如一些早期的IPTV裡的EPG都是運行在webview裡的,它們基於webkit內核,儘管我們使用的交互方式是遙控器。當然,今天我們會從native的角度切入,帶大家認識真正的webview。
  • WebView庫功能完善
    ws.setCacheMode(WebSettings.LOAD_DEFAULT);一般設置為默認的緩存模式就可以了。關於緩存的配置, 主要還是靠web前端和後臺設置。導致耗費資源……關於加載loading或者加載進度條,不一定要放到onPageStarted開始執行即顯示出來,因為webView從創建到這個方法會有一個時間……webView默認開啟密碼保存功能,如果網頁涉及到用戶登陸,密碼會被明文保到 /data/data/com.package.name/databases/webview.db 中,這樣就有被盜取密碼的危險……h5頁面被攔截或者注入廣告,重定向