การแจ้งเตือนความปลอดภัยของ Google Play Store บอกว่าแอปของคุณมีไลบรารี่ JavaScript ที่อ่อนแอวิธีการลบคำเตือนความปลอดภัย?


13

ใน Google Play Store กำลังได้รับคำเตือนด้านล่างเช่นนี้

แอปของคุณมีหนึ่งหรือหลายไลบรารีที่มีปัญหาด้านความปลอดภัยที่รู้จัก โปรดดูบทความในศูนย์ช่วยเหลือของ Googleสำหรับรายละเอียด

ไลบรารี JavaScript ที่มีช่องโหว่:

  • ชื่อ -> jquery
  • เวอร์ชั่น -> 3.3.1
  • ปัญหาที่ทราบ -> SNYK-JS-JQUERY-174006
  • ไฟล์ที่ระบุ -> res / raw / jquery_min.js

หมายเหตุ: เมื่อโหลด webview ในแอปของฉันฉันจะ InterceptRequest ใน webview url และโหลดไฟล์ jquery_min.js ภายในเครื่องจากทรัพยากรโฟลเดอร์ raw ซึ่งช่วยให้เราโหลดหน้าเว็บได้เร็วขึ้นเนื่องจากฟังก์ชั่นนี้และฉันประหยัด 5 gb ดาวน์โหลดจากเซิร์ฟเวอร์ต่อเดือน

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่างโปรแกรม 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 จะลบ Security Alert (ไลบรารี JavaScript ที่มีช่องโหว่) หรือไม่
  2. หากฉันวางสคริปต์ Jquery ไว้ที่อื่นในแอปของฉัน google play จะลบ Security Alert หรือไม่
  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) คุณสามารถใช้ patch จากDanielRuf's snyk-js-jquery-174006 (*)

(*) แต่ฉันไม่แน่ใจว่า Google ค้นหาไฟล์ jquery ใน apk มีช่องโหว่และได้รับการแก้ไขแล้ว ... จำเป็นต้องทดสอบ (**)

อัปเดต 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) ดูเหมือนว่าจะทำงานในรุ่นใหม่ของฉัน (และสิ่งนี้ทำงานได้แม้ในไฟล์ที่ไม่ได้เปรียบเทียบในการทดสอบของฉันมันควรจะทำการแก้ไข)


ขอขอบคุณการลบความคิดเห็นรุ่น jQuery ออกจากไฟล์. js นั้นเป็นสิ่งที่เกิดขึ้นทั้งหมด
Andrew Lim

0

การแจ้งเตือนความปลอดภัย

แอปพลิเคชันของคุณมีหนึ่งไลบรารีขึ้นไปที่มีปัญหาด้านความปลอดภัยทั่วไป โปรดดูบทความในศูนย์ช่วยเหลือของ Google สำหรับรายละเอียด

ไลบรารี JavaScript ที่มีช่องโหว่:

ชื่อรุ่นปัญหาที่ทราบไฟล์ที่ระบุ jquery 2.2.4 SNYK-npm: jquery: 20150627 SNYK-JS-JQUERY-174006 สินทรัพย์ / jquery-2.2.4.min.js มีผลกับ APK เวอร์ชัน 9

ปัญหา: ฉันใช้ jquery เวอร์ชั่น 3.4.1 และมันมีผลต่อลักษณะที่ปรากฏของแอปพลิเคชันของฉันเช่นในธีมของจอแสดงผลไอคอนแอปพลิเคชันไม่สามารถมองเห็นได้และกลายเป็นยุ่งเหยิง

ถูกต้อง ... ฉันเปลี่ยนคำเตือนความปลอดภัยเวอร์ชัน 3.4.1 จาก Google ที่แก้ไขแล้ว แต่ไอคอนแอปพลิเคชันไม่สามารถมองเห็นได้และจะยุ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.