Alerta de segurança da Google Play Store Diz que seu aplicativo contém bibliotecas JavaScript vulneráveis ​​como remover o aviso de segurança?


13

Na Google Play Store, recebo um aviso abaixo como este,

Seu aplicativo contém uma ou mais bibliotecas com problemas de segurança conhecidos. Consulte este artigo da Central de Ajuda do Google para obter detalhes.

Bibliotecas JavaScript vulneráveis:

  • Nome -> jquery
  • Versão -> 3.3.1
  • Problemas conhecidos -> SNYK-JS-JQUERY-174006
  • Arquivos identificados -> res / raw / jquery_min.js

Nota: ao carregar o webview no meu aplicativo, interceptarei o URL no webview e carrego o arquivo jquery_min.js local a partir do recurso de pasta bruta, que nos ajuda a carregar a página da Web mais rapidamente devido a essa função e economizo 5 gb de download do servidor por mês.

insira a descrição da imagem aqui

Programa WebView de amostra

    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);

Classe para carregar scripts locais

 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. Se eu atualizar um novo script do Jquery, o Google Play removerá o Alerta de segurança (bibliotecas JavaScript vulneráveis)?
  2. Se eu colocar o script Jquery em outro lugar no meu aplicativo, o Google Play removerá o Alerta de segurança?
  3. Deixe-me saber qual é a maneira eficiente de carregar o script na webview sem carregar todas as vezes do servidor.

Você provavelmente pode baixar os scripts de um bucket da nuvem (talvez o Firebase) e depois usá-los. Ao fazer isso, o Play Console não encontrará nenhuma vulnerabilidade no seu aplicativo.
Shubham Panchal 10/10/19

Respostas:


12

Este problema refere-se a uma antiga vulnerabilidade do jquery do seu arquivo res / raw / jquery_min.js.

Apenas atualizei o jquery_min.js para a v3.4.1 e corrija-o.

Você pode corrigi-lo manualmente na sua alteração de arquivo no código:

De:

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

Para:

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

Encontrei esta solução em https://www.privacy-wise.com/mitigating-cve-2019-11358-in-old-versions-of-jquery/ e trabalhei para mim.


1
  1. usa o jquery v3.4.0 + mais recente
  2. se o jquery antigo v1.x / v2.x tiver que ser usado devido à dependência de seus códigos ou de bibliotecas de terceiros (como o jquery mobile etcs), você poderá obter um patch do snyk-js-jquery-174006 do DanielRuf (*)

(*) mas não tenho certeza de como o Google encontra o arquivo jquery no apk tem vulnerabilidade e foi corrigido ... precisa testar (**)

02/01/2020 atualizado: o arquivo corrigido do método 2 acima não pode evitar a verificação de alertas do Google. Remove a primeira linha de comentário

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

dentro do jquery-2.2.4.min.js (e também renomeio para jquery-patched.2.2.4.min.js) parece funcionar na minha nova versão. (e isso funcionou mesmo no arquivo sem patch do meu teste, é melhor fazer um patch)


Obrigado, remover o comentário da versão do jQuery do arquivo .js foi o suficiente.
Andrew Lim

0

Notificação de segurança

Seu aplicativo contém uma ou mais bibliotecas que têm problemas gerais de segurança. Consulte este artigo da Central de Ajuda do Google para obter detalhes.

Biblioteca JavaScript vulnerável:

Nome da versão Problema conhecido Arquivo identificado jquery 2.2.4 SNYK-npm: jquery: 20150627 SNYK-JS-JQUERY-174006 assets / jquery-2.2.4.min.js Afeta a versão 9 do APK.

Problema: usei o jquery versão 3.4.1 e isso afeta a aparência do meu aplicativo, por exemplo, no tema de exibição, o ícone do aplicativo não fica visível e fica confuso

correto ... Alterei o aviso de segurança da versão 3.4.1 do Google resolvido, mas o ícone do aplicativo não está visível e fica confuso

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.