Google Play Store Security Alert Mówi, że Twoja aplikacja zawiera wrażliwe biblioteki JavaScript, jak usunąć ostrzeżenie dotyczące bezpieczeństwa?

13

W sklepie Google Play otrzymuję poniższe ostrzeżenie,

Twoja aplikacja zawiera jedną lub więcej bibliotek ze znanymi problemami bezpieczeństwa. Szczegółowe informacje można znaleźć w tym artykule Centrum pomocy Google .

Wrażliwe biblioteki JavaScript:

  • Nazwa -> jquery
  • Wersja -> 3.3.1
  • Znane problemy -> SNYK-JS-JQUERY-174006
  • Zidentyfikowane pliki -> res / raw / jquery_min.js

Uwaga: podczas ładowania webview do mojej aplikacji przechwycę InterceptRequest w url webview i załaduję lokalny plik jquery_min.js z zasobu surowego folderu, co pomaga nam szybciej ładować stronę dzięki tej funkcji i oszczędzam pobieranie 5 GB z serwera miesięcznie.

wprowadź opis zdjęcia tutaj

Przykładowy program 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);

Klasa do ładowania skryptów lokalnych

 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. Jeśli zaktualizuję nowy skrypt Jquery, czy Google Play usunie Alert bezpieczeństwa (wrażliwe biblioteki JavaScript)?
  2. Jeśli umieszczę skrypt Jquery gdzie indziej w mojej aplikacji, czy Google Play usunie Alert bezpieczeństwa?
  3. Daj mi znać, jaki jest skuteczny sposób ładowania skryptu do widoku internetowego bez konieczności każdorazowego ładowania z serwera.
Sarath Kumar
źródło
Prawdopodobnie możesz pobrać skrypty z wiadra chmurowego (może Firebase), a następnie użyć ich. W ten sposób konsola Play nie znajdzie żadnych luk w Twojej aplikacji.
Shubham Panchal,

Odpowiedzi:

12

Ten problem dotyczy starej luki w zabezpieczeniach jquery z pliku res / raw / jquery_min.js.

Właśnie zaktualizowałem plik jquery_min.js do wersji 3.4.1 i napraw go.

Możesz to naprawić ręcznie w zmianie pliku w kodzie:

Od:

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

Do:

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

Znalazłem to rozwiązanie w https://www.privacy-wise.com/mitigating-cve-2019-11358-in-old-versions-of-jquery/ i pracowałem dla mnie.

RSednan
źródło
1
  1. używa najnowszej jquery v3.4.0 +
  2. jeśli trzeba użyć starej jquery v1.x / v2.x, ponieważ kody lub zależność od bibliotek stron trzecich (takich jak jquery mobile itp.), możesz pobrać łatkę z snyk-js-jquery-174006 DanielRufa (*)

(*), ale nie jestem pewien, jak Google znajduje plik jquery w apk ma lukę i został załatany ... musi przetestować (**)

2/1/2020 zaktualizowano: użyj powyższej poprawionej metody 2, nie można uniknąć sprawdzania alertów Google. Usuwa pierwszy wiersz komentarza

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

wewnątrz jquery-2.2.4.min.js (i zmieniam też nazwę na jquery-łatane.2.2.4.min.js) wydaje się działać w mojej nowej wersji. (i działało to nawet w przypadku niepakowanego pliku w moim teście, lepiej zrobić łatkę)

ob.yann
źródło
Dzięki, usunięcie komentarza do wersji jQuery z pliku .js wystarczyło.
Andrew Lim,
0

Powiadomienie o bezpieczeństwie

Twoja aplikacja zawiera jedną lub więcej bibliotek, które mają ogólne problemy z bezpieczeństwem. Szczegółowe informacje można znaleźć w tym artykule Centrum pomocy Google.

Wrażliwa biblioteka JavaScript:

Wersja Nazwa Znany problem Zidentyfikowany plik jquery 2.2.4 SNYK-npm: jquery: 20150627 SNYK-JS-JQUERY-174006 asset / jquery-2.2.4.min.js Dotyczy wersji APK 9.

Problem: użyłem jquery w wersji 3.4.1 i ma to wpływ na wygląd mojej aplikacji, na przykład w motywie wyświetlania ikona aplikacji jest niewidoczna i staje się niechlujna

poprawne ... Zmieniłem ostrzeżenie bezpieczeństwa wersji 3.4.1 od Google rozwiązane, ale ikona aplikacji nie jest widoczna i staje się niechlujna

MaxiMax-Iron Simenjangan
źródło