【问题标题】:Google Play Store Security Alert Says that your app contains Vulnerable JavaScript libraries how to remove the security warning?Google Play 商店安全警报说您的应用包含易受攻击的 JavaScript 库如何删除安全警告?
【发布时间】:2020-02-07 12:03:02
【问题描述】:

在 Google Play 商店中收到如下警告,

您的应用包含一个或多个存在已知安全问题的库。详情请看Google Help Center article

易受攻击的 JavaScript 库:

  • 名称 --> jquery
  • 版本 --> 3.3.1
  • 已知问题 --> SNYK-JS-JQUERY-174006
  • 已识别文件 --> res/raw/jquery_min.js

注意:在我的应用程序中加载 webview 时,我将在 webview url 中拦截请求并从原始文件夹资源加载本地 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 会播放 删除安全警报?
  3. 让我知道加载脚本的有效方法是什么 webview 无需每次都从服务器加载。

【问题讨论】:

  • 您可以从云存储桶(可能是 Firebase)下载脚本,然后使用它们。这样一来,Play 管理中心就不会在您的应用中发现任何漏洞。

标签: javascript android webview google-play google-play-console


【解决方案1】:

此问题涉及您的 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 商店中收到此错误,为什么??
【解决方案2】:
  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 内部似乎在我的新版本中有效。(即使在我的测试中未打补丁的文件上也有效,最好打个补丁) p>

【讨论】:

  • 谢谢,从 .js 文件中删除 jQuery 版本注释就完成了。
【解决方案3】:

安全通知

您的应用程序包含一个或多个存在一般安全问题的库。有关详细信息,请参阅此 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 版安全警告已解决,但应用程序图标不可见且变得凌乱

【讨论】:

    【解决方案4】:

    我已经使用 CDN 中的 jQuery 解决了这个问题。

    我在我的应用程序中使用 jQueryMobile,它不受 jQuery v3+ 支持。所以,我别无选择,只能坚持使用 jQuery v2。所以,我使用了谷歌的 CDN 而不是本地的 .js 文件,并且成功了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多