Kategoria OWASP: MASVS-CODE: jakość kodu
Omówienie
WebView to osadzony komponent przeglądarki w aplikacjach na Androida, który ułatwia wyświetlanie treści internetowych w aplikacji. Renderuje kod HTML, CSS JavaScript w interfejsie aplikacji.
Cross-App Scripting jest powiązany z wykonywaniem złośliwego kodu w kontekście aplikacji poszkodowanej. Na potrzeby tej dokumentacji podmiot będzie ograniczony do wstrzykiwania złośliwych kod JavaScript w komponencie WebView podatnym na atak.
Gdy aplikacja akceptuje złośliwy kod JavaScript w komponencie WebView bez wystarczających lub walidacji lub oczyszczania, aplikacja jest podatna na ataki Skrypty.
Wpływ
Luki w zabezpieczeniach cross-app scripting na potrzeby ataku kontrolowanego przez atakującego Treść JavaScript jest przekazywana do WebView aplikacji z lukami w zabezpieczeniach bez zweryfikowane lub oczyszczone. W rezultacie kod JavaScriptu dostarczony przez osobę atakującą jest wykonywany w kontekście WebView aplikacji ofiary. złośliwy kod JavaScript może korzystać z tych samych uprawnień, co aplikacji, której używa ofiara, które może doprowadzić do kradzieży poufnych danych użytkownika i przejęcia konta.
Łagodzenie
Wyłącz JavaScript
Jeśli Twoja aplikacja nie wymaga JavaScriptu, wyłączenie tego języka sprawi, że nie będzie on stanowił zagrożenia:
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 kodu JavaScript przekazywanego do WebView lub masz nad nim kontrolę. Nie zezwalaj WebView na uruchamianie dowolnych JavaScript, wskazówki znajdziesz w następnej sekcji.
Sprawdź, czy do komponentu WebView wczytywana jest tylko oczekiwana treść
Jeśli używasz metod takich jak shouldOverrideUrlLoading(), loadUrl() lub evaluateJavascript(),, sprawdź, czy wszystkie przekazywane im adresy URL są sprawdzane. Jak wspomnieliśmy wcześniej, kod JavaScript przekazywany do WebView powinien tylko
pochodzące z oczekiwanych domen, więc ważne jest, aby sprawdzić, co jest wczytywane.
Zapoznaj się z dokumentacją weryfikacji danych wejściowych OWASP oraz tym Androidem na liście kontrolnejkomponentów WebView zawierające przydatne wskazówki i przykłady.
Konfigurowanie bezpiecznych ustawień dostępu do plików w komponencie WebView
Upewnij się, że nie masz dostępu do plików, aby uniemożliwić dowolnym skryptom JavaScript
jest wykonywana w komponentach WebView. Powinien to być tag WebSettings.
brane pod uwagę podczas zabezpieczania dostępu do plików:
- Wyłącz dostęp do plików. Domyślnie parametr
setAllowFileAccessma wartośćTruew przypadku poziomu API 29 i niższych, co umożliwia dostęp do plików lokalnych. Na poziomie API 30 i wyższym domyślnie jest toFalse. Aby uniemożliwić dostęp do plików, jednoznacznie ustawsetAllowFileAccessnaFalse Wyłącz dostęp do treści. Domyślne ustawienie parametru
setAllowContentAccesstoTrue. Dostęp do adresu URL treści pozwala komponentowi WebView na ładowanie treści z treści. dostawcy zainstalowanego w systemie. Jeśli aplikacja nie wymaga dostępu do treści, ustawsetAllowContentAccessnaFalse, aby zapobiec potencjalnemu niewłaściwemu użyciu w przypadku ataki 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 domenie AndroidManifest.xml, aby skanować adresy URL przekazywane do
WebView do wykrywania prób wyłudzania informacji i złośliwych domen.
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Materiały
- Dokumentacja Bezpiecznego przeglądania
- Dokumentacja dla programistów WebView
- Informacje o ustawieniach internetowych ustawień WebView dla programistów WebView
- setAllowFileAccess w dokumentacji dla programistów
- Informacje dla deweloperów dotyczące setAllowContentAccess