OWASP-Kategorie:MASVS-CODE: Codequalität
Übersicht
Ein WebView ist eine in Android-Anwendungen eingebettete Browserkomponente, die die Anzeige von Webinhalten in einer App erleichtern. Es rendert HTML, CSS und JavaScript auf der Benutzeroberfläche der App.
Cross-App Scripting wird häufig mit der Ausführung von schädlichem Code in Verbindung gebracht. im Kontext eines Opferantrags. Im Rahmen dieser Dokumentation beschränkt sich die Subjekt ausschließlich auf das Einschleusen schädlicher JavaScript-Code in eine anfällige WebView verschieben.
Wenn eine App schädlichen JavaScript-Code in eine WebView akzeptiert, obwohl nicht ausreichend Validierung oder Bereinigung ist die Anwendung anfällig für anwendungsübergreifende Skripting.
Positiv beeinflussen
Cross-App-Scripting-Sicherheitslücken können ausgenutzt werden, wenn von Angreifern kontrollierte JavaScript-Inhalte an die WebView der anfälligen App übergeben werden, ohne validiert oder bereinigt zu werden. Daraus folgt, dass der JavaScript-Code, der von der der Angreifer im Zusammenhang mit dem WebView der Opferanwendung ausgeführt wird. Der schädliche JavaScript-Code kann dann dieselben Berechtigungen wie die der Opfer-App verwenden, was zum Diebstahl sensibler Nutzerdaten und zum Hacken von Konten führen kann.
Abhilfemaßnahmen
JavaScript deaktivieren
Wenn Ihre Anwendung JavaScript nicht benötigt, können Sie es deaktivieren, um sicherzustellen, nicht zu einer Bedrohung wird:
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);
Wenn für Ihre Anwendung JavaScript erforderlich ist, müssen Sie Inhaber oder Administrator des an WebView übergebenen JavaScript sein. Vermeiden Sie es, WebView zu erlauben, beliebiges JavaScript auszuführen. Weitere Informationen finden Sie im nächsten Abschnitt.
Sicherstellen, dass nur erwartete Inhalte in WebView geladen werden
Wenn Sie Methoden wie shouldOverrideUrlLoading()
, loadUrl()
oder
evaluateJavascript()
,
muss dafür sorgen, dass alle an sie übergebenen URLs
aktiviert. Wie bereits erwähnt, sollte JavaScript, das an die WebView übergeben wird, nur von erwarteten Domains stammen. Daher ist es wichtig, zu prüfen, was geladen wird.
Lesen Sie die Dokumentation zur Eingabevalidierung von OWASP und diesen Android- Sicherheits-Checkliste für WebViews finden Sie hilfreiche Tipps und Beispiele.
Einstellungen für den sicheren Dateizugriff für WebView festlegen
Wenn Sie dafür sorgen, dass kein Zugriff auf Dateien möglich ist, kann verhindert werden, dass beliebiges JavaScript in WebViews ausgeführt wird. Beachten Sie beim Schützen des Dateizugriffs Folgendes: WebSettings
- Deaktivieren Sie den Dateizugriff. Standardmäßig ist
setAllowFileAccess
in API-Ebene 29 und niedriger aufTrue
festgelegt, was den Zugriff auf lokale Dateien ermöglicht. In API-Level 30 und höher ist der StandardwertFalse
. Um sicherzustellen, dass der Dateizugriff nicht erlaubt ist,setAllowFileAccess
explizit aufFalse
setzen Deaktivieren Sie den Inhaltszugriff. Die Standardeinstellung von
setAllowContentAccess
istTrue
. Über den Zugriff auf die Content-URL kann WebView Inhalte von einem im System installierten Contentanbieter laden. Wenn für Ihre App kein Zugriff auf Inhalte erforderlich ist, Setzen SiesetAllowContentAccess
aufFalse
, um einen potenziellen Missbrauch zu verhindern. App-übergreifende Scripting-Attacke.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);
Safe Browsing aktivieren
Aktivieren Sie Safe Browsing in AndroidManifest.xml
, um URLs zu scannen, die an
WebView für Phishing oder schädliche Domains:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Ressourcen
- Safe Browsing-Dokumentation
- WebView-Entwicklerreferenz
- WebSettings für WebView-Entwicklerreferenz
- Entwicklerdokumentation zu setAllowFileAccess
- setAllowContentAccess – Entwicklerreferenz