Google Playストアのセキュリティ警告アプリに脆弱なJavaScriptライブラリが含まれているとセキュリティ警告を削除する方法を教えてください。


13

Google Playストアではこのように以下の警告を受けています、

アプリには、既知のセキュリティ問題のある1つ以上のライブラリが含まれています。詳しくは、こちらのGoogleヘルプセンターの記事をご覧ください。

脆弱なJavaScriptライブラリ:

  • 名前-> jquery
  • バージョン-> 3.3.1
  • 既知の問題-> SNYK-JS-JQUERY-174006
  • 識別されたファイル-> res / raw / jquery_min.js

注:アプリにwebviewを読み込むときは、webviewのURLでInterceptRequestを実行し、rawフォルダーリソースからローカルのjquery_min.jsファイルを読み込みます。

ここに画像の説明を入力してください

サンプルWebViewプログラム

    LoadLocalScripts localScripts=new LoadLocalScripts(this);
    webView.setWebViewClient(new WebViewClient() {


                public boolean shouldOverrideUrlLoading(WebView view, String url) {

                    return true;
                }

                //Show loader on url load
                public void onLoadResource(WebView view, String url) {

                }

                public void onPageFinished(WebView view, String url) {

                    }
                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

                }


                @Override
                public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {

                    WebResourceResponse response= localScripts.getLocalSCripts(url);
                    if(response==null) {
                        return super.shouldInterceptRequest(view, url);
                    }else{
                        return response;
                    }
                }


            });

  webView.loadUrl(url);

ローカルスクリプトをロードするためのクラス

 public class LoadLocalScripts {
    private Context ctx;

    public LoadLocalScripts(Context context) {
        ctx=context;
    }

    public WebResourceResponse getLocalSCripts(String url)
    {
        //Log.e("url_raw",url);

        if (url.contains(".css")) {
            if(url.contains("bootstrap.min.css")) {
                return getCssWebResourceResponseFromRawResource("bootstrap_min.css");
            }else {
                return null;
            }
        }else  if (url.contains(".js")){
             if(url.contains("bootstrap.min.js")) {
                return getScriptWebResourceResponseFromRawResource("bootstrap_min.js");
            } else if(url.contains("jquery.lazyload.min.js")) {
                 return getScriptWebResourceResponseFromRawResource("lazyload_min.js");
             } else{
                 return null;
             }
        } else {
            return null;
        }
    }


    /**
     * Return WebResourceResponse with CSS markup from a raw resource (e.g. "raw/style.css").
     */
    private WebResourceResponse getCssWebResourceResponseFromRawResource(String url) {

        //Log.e("url_raw",url);
        if(url.equalsIgnoreCase("bootstrap_min.css")) {
            return getUtf8EncodedCssWebResourceResponse(ctx.getResources().openRawResource(R.raw.bootstrap_min));
        }else {
            return null;
        }
    }

    private WebResourceResponse getScriptWebResourceResponseFromRawResource(String url) {

        //Log.e("url_raw",url);
        if(url.equalsIgnoreCase("bootstrap_min.js")) {
            return getUtf8EncodedScriptWebResourceResponse(ctx.getResources().openRawResource(R.raw.bootstrap_min_js));
        }else if(url.equalsIgnoreCase("lazyload_min.js")) {
            return getUtf8EncodedScriptWebResourceResponse(ctx.getResources().openRawResource(R.raw.lazyload_min));
        }else {
            return null;
        }
    }


    private WebResourceResponse getUtf8EncodedCssWebResourceResponse(InputStream data) {
        return new WebResourceResponse("text/css", "UTF-8", data);
    }

    private WebResourceResponse getUtf8EncodedScriptWebResourceResponse(InputStream data) {
        return new WebResourceResponse("text/javascript", "UTF-8", data);
    }
}
  1. Jqueryスクリプトを新しく更新した場合、Google Playはセキュリティ警告(脆弱なJavaScriptライブラリ)を削除しますか?
  2. Jqueryスクリプトをアプリの別の場所に配置すると、Google Playはセキュリティ警告を削除しますか?
  3. サーバーから毎回ロードすることなく、webviewでスクリプトをロードする効率的な方法を教えてください。

おそらく、クラウドバケット(おそらくFirebase)からスクリプトをダウンロードして使用できます。そうすることで、Play Consoleはアプリの脆弱性を検出しません。
Shubham Panchal、

回答:


12

この問題は、res / raw / jquery_min.jsファイルからのjqueryの古い脆弱性を参照しています。

jquery_min.jsをv3.4.1に更新して修正しました。

コードのファイル変更で手動で修正できます:

から:

if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||

に:

if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||

私はこのソリューションをhttps://www.privacy-wise.com/mitigating-cve-2019-11358-in-old-versions-of-jquery/で見つけ、私のために働いた。


1
  1. 最新のjquery v3.4.0以降を使用
  2. コードまたはサードパーティライブラリ依存(jqueryモバイルなど)のために古いjquery v1.x / v2.xを使用する必要がある場合は、DanielRufのsnyk-js-jquery-174006からパッチを取得できます(*)

(*)しかし、Googleがapkのjqueryファイルを検出する方法に脆弱性があり、パッチが適用されているかどうかはわかりません...テストする必要があります(**)

2020年2月1日更新:上記の方法2のパッチを適用したファイルでは、Googleアラートチェックを回避できません。最初のコメント行を削除します

/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */

jquery-2.2.4.min.js内(およびjquery-patched.2.2.4.min.jsにも名前を変更)は、私の新しいリリースで機能しているようです。(そしてこれは私のテストでパッチされていないファイルでも機能しました、それはパッチを作る方が良いでしょう)


おかげで、.jsファイルからjQueryバージョンのコメントを削除するだけで済みました。
Andrew Lim

0

セキュリティ通知

アプリケーションに、一般的なセキュリティの問題がある1つ以上のライブラリが含まれています。詳しくは、こちらのGoogleヘルプセンターの記事をご覧ください。

脆弱なJavaScriptライブラリ:

バージョン名既知の問題ファイルが特定されたjquery 2.2.4 SNYK-npm:jquery:20150627 SNYK-JS-JQUERY-174006アセット/ jquery-2.2.4.min.js影響APKバージョン9

問題:jqueryバージョン3.4.1を使用しましたが、アプリケーションの外観に影響します。たとえば、表示テーマで、アプリケーションアイコンが表示されず、乱雑になります。

正しい...バージョン3.4.1のセキュリティ警告をGoogleから変更しましたが解決しましたが、アプリケーションアイコンが表示されず乱雑になります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.