W sklepie Google Play otrzymuję poniższe ostrzeżenie,
Twoja aplikacja zawiera jedną lub więcej bibliotek ze znanymi problemami bezpieczeństwa. Szczegółowe informacje można znaleźć w tym artykule Centrum pomocy Google .
Wrażliwe biblioteki JavaScript:
- Nazwa -> jquery
- Wersja -> 3.3.1
- Znane problemy -> SNYK-JS-JQUERY-174006
- Zidentyfikowane pliki -> res / raw / jquery_min.js
Uwaga: podczas ładowania webview do mojej aplikacji przechwycę InterceptRequest w url webview i załaduję lokalny plik jquery_min.js z zasobu surowego folderu, co pomaga nam szybciej ładować stronę dzięki tej funkcji i oszczędzam pobieranie 5 GB z serwera miesięcznie.
Przykładowy program 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);
Klasa do ładowania skryptów lokalnych
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);
}
}
- Jeśli zaktualizuję nowy skrypt Jquery, czy Google Play usunie Alert bezpieczeństwa (wrażliwe biblioteki JavaScript)?
- Jeśli umieszczę skrypt Jquery gdzie indziej w mojej aplikacji, czy Google Play usunie Alert bezpieczeństwa?
- Daj mi znać, jaki jest skuteczny sposób ładowania skryptu do widoku internetowego bez konieczności każdorazowego ładowania z serwera.
javascript
android
webview
google-play
google-play-console
Sarath Kumar
źródło
źródło
Odpowiedzi:
Ten problem dotyczy starej luki w zabezpieczeniach jquery z pliku res / raw / jquery_min.js.
Właśnie zaktualizowałem plik jquery_min.js do wersji 3.4.1 i napraw go.
Możesz to naprawić ręcznie w zmianie pliku w kodzie:
Od:
if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||
Do:
if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||
Znalazłem to rozwiązanie w https://www.privacy-wise.com/mitigating-cve-2019-11358-in-old-versions-of-jquery/ i pracowałem dla mnie.
źródło
(*), ale nie jestem pewien, jak Google znajduje plik jquery w apk ma lukę i został załatany ... musi przetestować (**)
2/1/2020 zaktualizowano: użyj powyższej poprawionej metody 2, nie można uniknąć sprawdzania alertów Google. Usuwa pierwszy wiersz komentarza
wewnątrz jquery-2.2.4.min.js (i zmieniam też nazwę na jquery-łatane.2.2.4.min.js) wydaje się działać w mojej nowej wersji. (i działało to nawet w przypadku niepakowanego pliku w moim teście, lepiej zrobić łatkę)
źródło
Powiadomienie o bezpieczeństwie
Twoja aplikacja zawiera jedną lub więcej bibliotek, które mają ogólne problemy z bezpieczeństwem. Szczegółowe informacje można znaleźć w tym artykule Centrum pomocy Google.
Wrażliwa biblioteka JavaScript:
Problem: użyłem jquery w wersji 3.4.1 i ma to wpływ na wygląd mojej aplikacji, na przykład w motywie wyświetlania ikona aplikacji jest niewidoczna i staje się niechlujna
poprawne ... Zmieniłem ostrzeżenie bezpieczeństwa wersji 3.4.1 od Google rozwiązane, ale ikona aplikacji nie jest widoczna i staje się niechlujna
źródło