Android WebViewのJavaScriptインターフェースの公開

Android WebViewのJavaScriptインターフェースの公開

説明

addJavascriptInterface は、JavaやKotlinのオブジェクトをWebViewのJavaScript環境に公開します。信頼できないページや外部入力で組み立てたHTMLにこのインターフェースを公開すると、スクリプトからアプリ内部のメソッドを呼び出されるおそれがあります。

想定される影響

  • アプリ内部の機能の悪用
  • 機密データの漏えい
  • 古いAndroid環境でのリモートコード実行リスクの増加

対処方法

  1. 信頼できないコンテンツを読み込むWebViewには、JavaScriptインターフェースを追加しないでください。
  2. 公開するメソッドを最小限にし、@JavascriptInterface メソッドで権限と入力を検証してください。
  3. 外部URLではなく、アプリが管理する静的コンテンツだけを読み込んでください。

例

変更前

java
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Bridge(), "bridge");
webView.loadUrl(userControlledUrl);

変更後

java
webView.getSettings().setJavaScriptEnabled(false);
webView.loadUrl("file:///android_asset/help.html");

解説:

  • 変更前: addJavascriptInterface でJavaオブジェクトを公開すると、ページのスクリプトがそのメソッドを呼び出せます。
  • 変更後: 信頼できないコンテンツを読み込むWebViewでは addJavascriptInterface を使わないでください。この例はJavaScriptを無効にし、アプリに同梱したヘルプページを読み込みます。

参考資料