【发布时间】: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);
}
}
- 如果我更新新的 Jquery 脚本将 google play 删除安全 警报(易受攻击的 JavaScript 库)?
- 如果我将 Jquery 脚本放在我的应用程序中的其他位置,Google 会播放 删除安全警报?
- 让我知道加载脚本的有效方法是什么 webview 无需每次都从服务器加载。
【问题讨论】:
-
您可以从云存储桶(可能是 Firebase)下载脚本,然后使用它们。这样一来,Play 管理中心就不会在您的应用中发现任何漏洞。
标签: javascript android webview google-play google-play-console