Kategoria OWASP: MASVS-CODE: Jakość kodu
Przegląd
WebView to komponent przeglądarki wbudowany w aplikacje na Androida, który ułatwia wyświetlanie treści internetowych w aplikacji. Renderuje on HTML, CSS i JavaScript w interfejsie użytkownika aplikacji.
Cross-App Scripting jest ogólnie powiązany z wykonywaniem złośliwego kodu w kontekście aplikacji ofiary. Na potrzeby tej dokumentacji temat zostanie ograniczony do wstrzykiwania złośliwego kodu JavaScript do podatnego na ataki komponentu WebView.
Jeśli aplikacja akceptuje złośliwy kod JavaScript w komponencie WebView bez odpowiedniej weryfikacji lub oczyszczania, jest podatna na ataki CAS (Cross App Scripting).
Wpływ
Luki w zabezpieczeniach umożliwiające ataki typu cross-app scripting mogą być wykorzystywane, gdy kontrolowane przez atakującego treści JavaScript są przekazywane do podatnego na ataki komponentu WebView aplikacji bez weryfikacji lub oczyszczania. W rezultacie kod JavaScript dostarczony przez osobę atakującą jest wykonywany w kontekście komponentu WebView aplikacji ofiary. Złośliwy kod JavaScript może wtedy korzystać z tych samych uprawnień co aplikacja ofiary, co może prowadzić do kradzieży poufnych danych użytkownika i przejęcia konta.
Środki ograniczające ryzyko
Wyłącz JavaScript
Jeśli aplikacja nie wymaga JavaScriptu, wyłączenie go zapobiegnie zagrożeniom:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
Jeśli Twoja aplikacja wymaga JavaScriptu, upewnij się, że jesteś właścicielem lub masz kontrolę nad każdym kodem JavaScript przekazywanym do komponentu WebView. Unikaj zezwalania na wykonywanie dowolnego kodu JavaScript w widoku WebView. Wskazówki znajdziesz w następnej sekcji.
Upewnij się, że w komponencie WebView ładowane są tylko oczekiwane treści
Jeśli używasz metod takich jak shouldOverrideUrlLoading(), loadUrl() lub evaluateJavascript(),, upewnij się, że wszystkie przekazywane do nich adresy URL są sprawdzane. Jak wspomnieliśmy wcześniej, każdy kod JavaScript przekazywany do WebView powinien pochodzić tylko z oczekiwanych domen, dlatego ważne jest, aby sprawdzić, co jest wczytywane.
Dobre rady i przykłady znajdziesz w dokumentacji OWASP dotyczącej weryfikacji danych wejściowych oraz na tej liście kontrolnej bezpieczeństwa Androida w przypadku komponentów WebView.
Ustawianie bezpiecznych ustawień dostępu do plików w WebView
Upewnij się, że pliki nie są dostępne, aby zapobiec wykonywaniu dowolnego kodu JavaScript w komponentach WebView.Podczas zabezpieczania dostępu do plików należy wziąć pod uwagę te WebSettings:
- wyłączyć dostęp do plików, Domyślnie w przypadku interfejsu API na poziomie 29 i niższym wartość
setAllowFileAccessjest ustawiona naTrue, co umożliwia dostęp do plików lokalnych. Na poziomie API 30 i wyższym domyślna wartość toFalse. Aby uniemożliwić dostęp do plików, ustaw wartośćsetAllowFileAccessnaFalse. wyłączyć dostęp do treści, Domyślne ustawienie
setAllowContentAccesstoTrue. Dostęp do adresu URL treści umożliwia komponentowi WebView wczytywanie treści od dostawcy treści zainstalowanego w systemie. Jeśli aplikacja nie wymaga dostępu do treści, ustaw wartośćsetAllowContentAccessnaFalse, aby zapobiec potencjalnemu nadużyciu w przypadku ataku typu cross-app scripting.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Włącz Bezpieczne przeglądanie
Włącz Bezpieczne przeglądanie w AndroidManifest.xml, aby skanować adresy URL przekazywane do WebView pod kątem wyłudzania informacji lub złośliwych domen:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Zasoby
- Dokumentacja Bezpiecznego przeglądania
- Dokumentacja dewelopera WebView
- Dokumentacja dewelopera WebSettings dla komponentu WebView
- Dokumentacja dla deweloperów dotycząca setAllowFileAccess
- Dokumentacja dewelopera dotycząca metody setAllowContentAccess