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
setAllowFileAccess
ma wartośćTrue
w 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 ustawsetAllowFileAccess
naFalse
Wyłącz dostęp do treści. Domyślne ustawienie parametru
setAllowContentAccess
toTrue
. 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, ustawsetAllowContentAccess
naFalse
, 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 = false
java
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