OWASP 類別:MASVS-CODE:程式碼品質
總覽
WebView 是 Android 應用程式中的內嵌瀏覽器元件,可讓應用程式顯示網頁內容,並在應用程式的使用者介面中顯示 HTML、CSS 和 JavaScript。
跨應用程式指令碼攻擊通常是指在受害應用程式的環境中執行惡意程式碼。在本文件中,主題將特別限定於將惡意 JavaScript 程式碼注入容易遭到攻擊的 WebView。
如果應用程式在未充分驗證或清理的情況下,接受 WebView 中的惡意 JavaScript,就容易遭到跨應用程式指令碼攻擊。
影響
如果將由攻擊者控管的 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 的輸入驗證說明文件,以及這份適用於 WebView 的 Android 安全性檢查清單。
設定 WebView 的安全檔案存取設定
確保檔案無法存取,可防止任意 JavaScript 在 WebView 中執行。保護檔案存取權時,應考慮下列 WebSettings:
- 停用檔案存取權。根據預設,
setAllowFileAccess在 API 級別 29 以下版本中會設為True,允許存取本機檔案。在 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 = falsejava
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 開發人員參考資料