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()
などのメソッドを使用する場合は、渡された URL がチェックされていることを確認してください。,
前述のように、WebView に渡される JavaScript は、想定されるドメインからのみ取得される必要があります。そのため、何が読み込まれているかを検証することが重要です。
OWASP の入力検証に関するドキュメントとこちらの Android をご確認ください セキュリティチェックリストをご覧ください。
WebView の安全なファイル アクセスを設定する
ファイルにアクセスできないようにすれば、任意の JavaScript によるアクセスを
次の WebSettings
を
ファイル・アクセスを保護する場合に考慮すべきことです。
- ファイル アクセスを無効にします。デフォルトでは、
setAllowFileAccess
はTrue
に設定されています。 API レベル 29 以前: ローカル ファイルへのアクセスを許可します。API レベル 30 以降では、デフォルトはFalse
です。ファイルへのアクセスが許可されないようにするには、setAllowFileAccess
を明示的にFalse
に設定する コンテンツ アクセスを無効にします。
setAllowContentAccess
のデフォルト設定はTrue
です。コンテンツ URL アクセスにより、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 デベロッパー リファレンス