OWASP 類別:MASVS-CODE:程式碼品質
總覽
WebView 是 Android 應用程式中的嵌入式瀏覽器元件, 有助於在應用程式中顯示網頁內容。這類程式碼可轉譯 HTML、CSS 和 應用程式使用者介面中的 JavaScript。
跨應用程式指令碼與惡意程式碼的執行普遍相關 並用於受害應用程式的情境中就本文件而言,主題將專門限制在將惡意 JavaScript 程式碼插入漏洞 WebView 的情況。
應用程式接受惡意 JavaScript 而直接進入 WebView 時 驗證或清理作業,會導致應用程式容易遭受跨應用程式攻擊 編寫指令碼。
影響
當攻擊者控管的 JavaScript 內容未經過驗證或處理,就會傳遞至有安全漏洞的應用程式 WebView,進而遭到利用。因此,攻擊者提供的 JavaScript 程式碼會在受害應用程式的 WebView 中執行。惡意 JavaScript 程式碼隨後便可使用與受害應用程式相同的權限,進而竊取機密使用者資料,並盜用帳戶。
因應措施
停用 JavaScript
如果您的應用程式不需要 JavaScript,將其停用即可確保 並未成為威脅:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
如果您的應用程式需要 JavaScript,請確保您擁有或控制 傳送至 WebView 的 JavaScript。避免讓 WebView 任意執行 JavaScript,請參閱下一節的指南。
確保 WebView 中僅載入預期的內容
使用 shouldOverrideUrlLoading()
、loadUrl()
或 evaluateJavascript()
,
等方法時,請務必檢查傳遞給這些方法的所有網址。如先前所述,傳送至 WebView 的任何 JavaScript
來自預期網域,因此請務必驗證載入的內容。
請參閱 OWASP 的輸入驗證說明文件,以及這份 Android 安全性 檢查清單,瞭解 WebView 的最佳建議和範例。
調整 WebView 的檔案存取權設定
確保無法存取檔案,可避免在 WebView 中執行任意 JavaScript。在保護檔案存取權時,請考量下列 WebSettings
:
- 停用檔案存取權。根據預設,
setAllowFileAccess
會在以下位置設為True
: API 級別 29 以下,即可允許存取本機檔案。在 API 級別 30 中 且預設值為False
。為確保不允許存取檔案,請明確將setAllowFileAccess
設為False
停用內容存取權。
setAllowContentAccess
預設為True
。內容網址存取權可讓 WebView 從系統中安裝的內容供應器載入內容。如果您的應用程式不需要內容存取權, 將setAllowContentAccess
設為False
,以免發生下列情況 跨應用程式指令碼攻擊Kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
Java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
啟用安全瀏覽
在 AndroidManifest.xml
中啟用安全瀏覽功能,以掃描傳送至以下地址的網址:
透過 WebView 防範網路釣魚或惡意網域:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
資源
- 安全瀏覽說明文件
- WebView 開發人員參考資料
- WebView 開發人員參考資料的 WebSettings
- setAllowFileAccess 開發人員說明文件
- setAllowContentAccess 開發人員參考資料