Cảnh báo bảo mật của Google Play Store cho biết ứng dụng của bạn chứa các thư viện JavaScript dễ bị tổn thương làm thế nào để xóa cảnh báo bảo mật?


13

Trong Cửa hàng Google Play đang nhận được cảnh báo bên dưới như thế này,

Ứng dụng của bạn chứa một hoặc nhiều thư viện có vấn đề bảo mật đã biết. Vui lòng xem bài viết này của Trung tâm trợ giúp Google để biết chi tiết.

Các thư viện JavaScript dễ bị tổn thương:

  • Tên -> jquery
  • Phiên bản -> 3.3.1
  • Các sự cố đã biết -> SNYK-JS-JQUERY-174006
  • Các tệp được xác định -> res / raw / jquery_min.js

Lưu ý: khi tải webview trong ứng dụng của tôi, tôi sẽ InterceptRequest trong url webview và tải tệp jquery_min.js cục bộ từ tài nguyên thư mục thô giúp chúng tôi tải trang web nhanh hơn do chức năng này và tôi tiết kiệm được 5 gb tải xuống từ máy chủ mỗi tháng.

nhập mô tả hình ảnh ở đây

Chương trình WebView mẫu

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

Lớp để tải tập lệnh cục bộ

 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. Nếu tôi cập nhật mới cho tập lệnh Jquery thì google play có gỡ bỏ Security Alert (thư viện JavaScript dễ bị tổn thương) không?
  2. Nếu tôi đặt tập lệnh Jquery ở một nơi khác trong ứng dụng của mình, Google sẽ xóa Cảnh báo bảo mật?
  3. Hãy cho tôi biết cách hiệu quả để tải tập lệnh trong webview mà không cần tải mọi lúc từ máy chủ.

Bạn có thể có thể tải xuống các tập lệnh từ một nhóm đám mây (có thể là Firebase) và sau đó sử dụng chúng. Bằng cách đó, Play Console sẽ không tìm thấy bất kỳ lỗ hổng nào trong ứng dụng của bạn.
Shubham Panchal

Câu trả lời:


12

Vấn đề này đề cập đến một lỗ hổng cũ của jquery từ tệp res / raw / jquery_min.js của bạn.

Chỉ cần cập nhật jquery_min.js lên v3.4.1 và sửa nó.

Bạn có thể sửa nó bằng tay trong thay đổi tệp của bạn trong mã:

Từ:

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

Đến:

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

Tôi đã tìm thấy giải pháp này trong https://www.privacy-wise.com/mitigating-cve-2019-11353-in-old-versions-of-jquery/ và làm việc cho tôi.


1
  1. sử dụng jquery v3.4.0 + mới nhất
  2. nếu jquery v1.x / v2.x cũ phải được sử dụng vì mã của bạn hoặc thư viện của bên thứ 3 phụ thuộc (như jquery mobile etcs), bạn có thể lấy một bản vá từ snyk-js-jquery-174006 (*) của DanielRuf

(*) nhưng tôi không chắc chắn làm thế nào Google tìm thấy tệp jquery trong apk có lỗ hổng và đã được vá ... cần phải kiểm tra (**)

Đã cập nhật 2/1/2020: sử dụng phương pháp 2 tệp được vá ở trên không thể tránh được việc kiểm tra cảnh báo của Google. Xóa dòng nhận xét đầu tiên

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

bên trong jquery-2.2.4.min.js (và tôi cũng đổi tên thành jquery-patched.2.2.4.min.js) dường như đã hoạt động trong bản phát hành mới của tôi. (và điều này đã làm việc ngay cả trên tệp chưa được vá trong thử nghiệm của tôi, tốt hơn là nên tạo một bản vá)


Cảm ơn, xóa nhận xét phiên bản jQuery khỏi tệp .js là tất cả những gì nó cần.
Andrew Lim

0

Thông báo bảo mật

Ứng dụng của bạn chứa một hoặc nhiều thư viện có vấn đề bảo mật chung. Vui lòng xem bài viết này của Trung tâm trợ giúp Google để biết chi tiết.

Thư viện JavaScript dễ bị tổn thương:

Tên phiên bản Vấn đề đã biết Tệp được xác định jquery 2.2.4 SNYK-npm: jquery: 20150627 SNYK-JS-JQUERY-174006 tài sản / jquery-2.2.4.min.js ảnh hưởng đến APK phiên bản 9.

Vấn đề: Tôi đã sử dụng phiên bản jquery 3.4.1 và nó có ảnh hưởng đến sự xuất hiện của ứng dụng của tôi, ví dụ trong chủ đề hiển thị, biểu tượng ứng dụng không hiển thị và trở nên lộn xộn

đúng ... Tôi đã thay đổi cảnh báo bảo mật phiên bản 3.4.1 từ Google đã giải quyết nhưng, biểu tượng ứng dụng không hiển thị và trở nên lộn xộn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.