20

Webviewを使用して作成するAndroid Webアプリを作成しJavascriptていaddJavascriptInterface(true)ます。

私のアプリは、外部サイトから読み込まれるコンテンツ データ (html) になります。

addJavascriptInterface(true) を有効にしているため、アプリのクロスサイト スクリプティング XSS/セキュリティが心配でした。

アプリで悪意のあるコードが実行されないように注意する必要があることは何ですか?

4

3 に答える 3

22

Attacks on WebView in the Android Systemと呼ばれるシラキュース大学の優れた研究を見つけました。これは、 WebViewwithを使用して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);

これは素晴らしい研究であり、いくつかの異なる攻撃方法を概説しています。一読の価値あり!

于 2015-02-20T07:54:01.560 に答える
16

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 ページからメソッドにアクセスできません。

参照

于 2013-09-30T08:47:59.710 に答える
1

@Noni Aの回答と同様に、AndroidのWebviewをロックダウンするのに役立つこの要点を書きましshouldOverrideUrlLoadingたが、オーバーライドによってホワイトリストに登録されたURLの読み込みのみを許可しますがshouldInterceptRequest、AJAXタイプの呼び出しで使用されると信じています。

于 2016-02-18T15:07:20.840 に答える