Webview
を使用して作成するAndroid Webアプリを作成しJavascript
ていaddJavascriptInterface(true)
ます。
私のアプリは、外部サイトから読み込まれるコンテンツ データ (html) になります。
addJavascriptInterface(true) を有効にしているため、アプリのクロスサイト スクリプティング XSS/セキュリティが心配でした。
アプリで悪意のあるコードが実行されないように注意する必要があることは何ですか?
Webview
を使用して作成するAndroid Webアプリを作成しJavascript
ていaddJavascriptInterface(true)
ます。
私のアプリは、外部サイトから読み込まれるコンテンツ データ (html) になります。
addJavascriptInterface(true) を有効にしているため、アプリのクロスサイト スクリプティング XSS/セキュリティが心配でした。
アプリで悪意のあるコードが実行されないように注意する必要があることは何ですか?
Attacks on WebView in the Android Systemと呼ばれるシラキュース大学の優れた研究を見つけました。これは、 WebView
withを使用してaddJavascriptInterface(true)
2 種類の攻撃を可能にする方法を示しています。1 つは、インターフェイスに割り当てた電話サービス (連絡先、カメラなど) を介してアプリにアクセスできるようになった悪意のある Web サイトから、または 2 つは、悪意のあるアプリが脆弱な Web サイトにコードを挿入することでアクセスできることです。そのJavascript。
基本的に、アプリ開発者向けの修正はWebView
、意図した以外の URL を WebView で表示できないようにすることです。たとえば、Facebook.com を に埋め込んだとします。FacebookWebView
の他の広告がクリックされた場合に、WebView
. これは iFrame を介して最も一般的ですが、記事ではそれについて詳しく説明しています。
WebView
以下は、最初に意図した以外の URL で他の URL が表示されないことを保証する、彼らが提示する例です。
WebViewclient wvclient = New WebViewClient() {
// override the "shouldOverrideUrlLoading" hook.
public boolean shouldOverrideUrlLoading(WebView view,String url){
if(!url.startsWith("http://www.facebook.com")){
Intent i = new Intent("android,intent.action.VIEW",
Uri.parse(url));
startActivity(i);
}
}
// override the "onPageFinished" hook.
public void onPageFinished(WebView view, String url) { ...}
}
webView.setWebViewClient(wvclient);
これは素晴らしい研究であり、いくつかの異なる攻撃方法を概説しています。一読の価値あり!
JavaScriptを有効にすると、4.2 より古い webview に脆弱性が存在します 。
Javascript の有効化の使用:
JavaScript を有効にすると、アプリケーション コードと JavaScript コードの間にインターフェイスを作成できます。
addJavascriptInterface (オブジェクト オブジェクト、文字列名) メソッド:
addJavascriptInterface メソッドは、提供された Java オブジェクトを WebView に挿入します。
オブジェクトは、提供された名前を使用してメイン フレームの JavaScript コンテキストに挿入されます。これにより、JavaScript から Java オブジェクトのメソッドにアクセスできるようになります。
Android 4.1 以前を実行しているアプリケーションの場合、すべてのパブリック メソッド (継承されたものを含む) にアクセスできるため、ユーザーがインストールしたアプリケーションで addJavascriptInterface メソッドを使用して外部 Web ページをロードすると、WebView と JavaScript を使用して Java オブジェクト (「Javascript」など) を呼び出すことができます。これにより、攻撃者は Android の Java メソッドを呼び出すことができます。
修正:
Android 4.2 を実行しているアプリケーションでは、JavascriptInterface で注釈が付けられたすべてのパブリック メソッドに JavaScript からアクセスできます。
そのため、SDK バージョン 17 以降用のアプリケーションを開発する場合は、JavaScript で使用できるようにするメソッドに @JavascriptInterface アノテーションを追加する必要があります。
アノテーションを提供しない場合、Android 4.2 以降で実行している Web ページからメソッドにアクセスできません。
@Noni Aの回答と同様に、AndroidのWebviewをロックダウンするのに役立つこの要点を書きましshouldOverrideUrlLoading
たが、オーバーライドによってホワイトリストに登録されたURLの読み込みのみを許可しますがshouldInterceptRequest
、AJAXタイプの呼び出しで使用されると信じています。