谷歌Play商店安全警告表示您的应用程序包含易受攻击的JavaScript库,如何消除安全警告?

17

在 Google Play Store 中我收到以下警告:

您的应用程序包含一个或多个已知存在安全问题的库。请参阅此 Google 帮助中心文章 了解详情。

易受攻击的 JavaScript 库:

  • Name --> jquery
  • Version --> 3.3.1
  • Known issues --> SNYK-JS-JQUERY-174006
  • Identified files --> res/raw/jquery_min.js

注意:在我的应用程序中加载 Webview 时,我会拦截 Webview URL 中的请求,并从 raw 文件夹资源中加载本地的 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 Play会删除安全警告(易受攻击的JavaScript库)吗?
  2. 如果我将jQuery脚本放在应用程序的其他位置,Google Play会删除安全警告吗?
  3. 请告诉我在Webview中加载脚本的高效方法,而不必每次都从服务器加载。

你可以从云存储桶(例如 Firebase)下载脚本,然后使用它们。这样做,Play Console 就不会在你的应用中发现任何漏洞。 - Shubham Panchal
4个回答

15
这个问题是关于您的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/发现了这个解决方案,并且对我有用。

先生,我只在Webview中显示一个URL,没有使用jQuery,但我仍然在Play商店中遇到了这个错误,为什么? - Sunil Chaudhary

3
  1. 使用最新的jquery v3.4.0+
  2. 如果您的代码或第三方库依赖项(如jquery mobile等)需要使用旧的jquery v1.x/v2.x,则可以从DanielRuf's 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似乎可以正常工作。(即使在我的测试中,这也适用于未修补的文件,最好还是进行修补)


谢谢,只需从.js文件中删除jQuery版本注释即可。 - Andrew Lim
可以确认,2023年仍然可以通过从JavaScript文件的头部注释中删除jQuery版本的"修复"来解决问题。 - undefined

1

安全通知

您的应用程序包含一个或多个具有一般安全问题的库。请参阅此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解决,但应用程序图标不可见并变得混乱。


1
我已经通过CDN使用jQuery解决了这个问题。
我在我的应用程序中使用jQueryMobile,而jQuery v3+不支持该应用程序。因此,我别无选择,只能坚持使用jQuery v2。因此,我使用了Google的CDN而不是本地.js文件,它起作用了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接