跨應用程式指令碼

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" />

資源