Оповещение безопасности магазина Google Play Говорит, что ваше приложение содержит уязвимые библиотеки JavaScript, как удалить предупреждение безопасности?


13

В Google Play Store я получаю предупреждение ниже, как это,

Ваше приложение содержит одну или несколько библиотек с известными проблемами безопасности. Подробнее см. В этой статье Справочного центра Google .

Уязвимые библиотеки JavaScript:

  • Имя -> JQuery
  • Версия -> 3.3.1
  • Известные проблемы -> SNYK-JS-JQUERY-174006
  • Идентифицированные файлы -> res / raw / jquery_min.js

Примечание: при загрузке веб-просмотра в моем приложении я перехватываю InterceptRequest в URL-адресе веб-просмотра и загружаю локальный файл jquery_min.js из ресурса необработанной папки, который помогает нам быстрее загружать веб-страницу благодаря этой функции, и я экономлю 5 ГБ загрузки с сервера в месяц.

введите описание изображения здесь

Пример программы 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. Дайте мне знать, каков эффективный способ загрузки скрипта в веб-браузере без постоянной загрузки с сервера.

Вы могли бы, вероятно, загрузить сценарии из облачного хранилища (возможно, Firebase) и затем использовать их. Таким образом, Play Console не найдет никаких уязвимостей в вашем приложении.
Shubham Panchal

Ответы:


12

Эта проблема связана со старой уязвимостью jquery из файла res / raw / jquery_min.js.

Просто обновите 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 v1.x / v2.x должен использоваться из-за ваших кодов или зависимости от сторонних библиотек (например, jquery mobile etcs), вы можете взять патч из snyk-js-jquery-174006 DanielRuf (*)

(*) но я не уверен, как Google находит, что файл jquery в apk имеет уязвимость и был исправлен ... необходимо проверить (**)

01.02.2020 обновлено: исправленный файл с использованием вышеуказанного метода 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), похоже, работает в моем новом выпуске. (и это работало даже на непатченном файле в моем тесте, лучше сделать патч)


Спасибо, удаление комментария версии jQuery из файла .js - это все, что нужно.
Андрей Лим

0

Уведомление о безопасности

Ваше приложение содержит одну или несколько библиотек с общими проблемами безопасности. Подробнее см. В этой статье Справочного центра Google.

Уязвимая библиотека JavaScript:

Имя версии Известная проблема Файл идентифицирован jquery 2.2.4 SNYK-npm: jquery: 20150627 SNYK-JS-JQUERY-174006 assets / jquery-2.2.4.min.js Влияет на версию APK 9.

Проблема: я использовал jquery версии 3.4.1, и это влияет на внешний вид моего приложения, например, в теме экрана, значок приложения не виден и становится грязным

правильно ... Я изменил предупреждение о безопасности версии 3.4.1 от Google, но значок приложения не виден и становится грязным

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.