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文件,由于此功能,该功能可帮助我们更快地加载网页,而且我每月可从服务器节省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 Play会删除安全警报(易受攻击的JavaScript库)吗?
  2. 如果我将Jquery脚本放在我的应用程序中的其他位置,Google Play会删除安全警报吗?
  3. 让我知道在Webview中加载脚本而不每次都从服务器加载的有效方法是什么。

您可能可以从云存储桶(可能是Firebase)中下载脚本,然后使用它们。这样,Play控制台将不会在您的应用中发现任何漏洞。
Shubham Panchal

Answers:


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文件是否存在漏洞并已进行了修补...需要测试(**)

2020年2月1日更新:使用上述方法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版本注释即可。
安德鲁·林

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,它对应用程序的外观有影响,例如在显示主题中,应用程序图标不可见并且变得混乱

正确...我更改了来自Google的3.4.1版安全警告,但已解决,但该应用程序图标不可见并且变得混乱

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.