Trong Cửa hàng Google Play đang nhận được cảnh báo bên dưới như thế này,
Ứng dụng của bạn chứa một hoặc nhiều thư viện có vấn đề bảo mật đã biết. Vui lòng xem bài viết này của Trung tâm trợ giúp Google để biết chi tiết.
Các thư viện JavaScript dễ bị tổn thương:
- Tên -> jquery
- Phiên bản -> 3.3.1
- Các sự cố đã biết -> SNYK-JS-JQUERY-174006
- Các tệp được xác định -> res / raw / jquery_min.js
Lưu ý: khi tải webview trong ứng dụng của tôi, tôi sẽ InterceptRequest trong url webview và tải tệp jquery_min.js cục bộ từ tài nguyên thư mục thô giúp chúng tôi tải trang web nhanh hơn do chức năng này và tôi tiết kiệm được 5 gb tải xuống từ máy chủ mỗi tháng.
Chương trình WebView mẫu
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);
Lớp để tải tập lệnh cục bộ
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);
}
}
- Nếu tôi cập nhật mới cho tập lệnh Jquery thì google play có gỡ bỏ Security Alert (thư viện JavaScript dễ bị tổn thương) không?
- Nếu tôi đặt tập lệnh Jquery ở một nơi khác trong ứng dụng của mình, Google sẽ xóa Cảnh báo bảo mật?
- Hãy cho tôi biết cách hiệu quả để tải tập lệnh trong webview mà không cần tải mọi lúc từ máy chủ.