Google Play 스토어 보안 경고 앱에 취약한 JavaScript 라이브러리가 포함되어 보안 경고를 제거하는 방법이 있습니까?


13

Google Play 스토어에서 아래와 같은 경고가 표시됩니다.

앱에 알려진 보안 문제가있는 하나 이상의 라이브러리가 있습니다. 자세한 내용은이 Google 도움말 센터를 참조 하십시오.

취약한 JavaScript 라이브러리 :

  • 이름-> jquery
  • 버전-> 3.3.1
  • 알려진 문제-> SNYK-JS-JQUERY-174006
  • 확인 된 파일-> res / raw / jquery_min.js

참고 : 내 응용 프로그램에서 webview를로드 할 때 webview url에서 InterceptRequest를하고 원시 폴더 리소스에서 로컬 jquery_min.js 파일을로드하면이 기능으로 인해 웹 페이지를 더 빨리로드하고 매월 서버에서 5GB 다운로드를 저장할 수 있습니다.

여기에 이미지 설명을 입력하십시오

샘플 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에서 보안 경고 (취약한 JavaScript 라이브러리)를 제거합니까?
  2. 내 앱 어딘가에 Jquery 스크립트를 배치하면 Google이 보안 경고를 제거합니까?
  3. 서버에서 매번로드하지 않고 웹보기에서 스크립트를로드하는 효율적인 방법이 무엇인지 알려주십시오.

클라우드 버킷 (예 : 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 mobile 등)으로 인해 이전 jquery v1.x / v2.x를 사용해야하는 경우 DanielRuf의 snyk-js-jquery-174006 (*) 에서 패치를 가져올 수 있습니다

(*) 그러나 Google이 APK에서 jquery 파일에 취약점이 있고 패치 된 것을 어떻게 알 수 있는지 확실하지 않습니다 ... 테스트 할 필요가 있습니다 (**)

2/1/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로 이름 바꾸기)가 새 릴리스에서 작동하는 것 같습니다. (그리고 이것은 테스트에서 패치되지 않은 파일에서도 작동했습니다. 패치가 더 좋습니다)


감사합니다. .js 파일에서 jQuery 버전 주석을 제거하는 것이 전부였습니다.
Andrew Lim

0

보안 알림

응용 프로그램에 일반적인 보안 문제가있는 하나 이상의 라이브러리가 있습니다. 자세한 내용은이 Google 도움말 센터를 참조하십시오.

취약한 JavaScript 라이브러리 :

알려진 파일 이름 jquery 2.2.4 SNYK-npm : jquery : 20150627 SNYK-JS-JQUERY-174006 asset / jquery-2.2.4.min.js APK 버전 9에 영향을줍니다.

문제 : jquery 버전 3.4.1을 사용했는데 응용 프로그램의 모양에 영향을 미칩니다 (예 : 디스플레이 테마). 응용 프로그램 아이콘이 표시되지 않고 지저분한

올바른 ... Google에서 버전 3.4.1 보안 경고를 변경했지만 응용 프로그램 아이콘이 표시되지 않고 지저분한

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.