Категория OWASP: MASVS-CODE: Качество кода
Обзор
WebView — это встроенный компонент браузера в приложениях Android, который обеспечивает отображение веб-контента внутри приложения. Он отображает HTML, CSS и JavaScript в пользовательском интерфейсе приложения.
Межприкладной скриптинг (Cross-App Scripting) в широком смысле ассоциируется с выполнением вредоносного кода в контексте приложения-жертвы. В рамках данной документации мы ограничимся рассмотрением внедрения вредоносного кода JavaScript в уязвимый WebView.
Если приложение пропускает вредоносный JavaScript в WebView без достаточной проверки или очистки данных, оно становится уязвимым для межприложенийного скриптинга (XSS).
Влияние
Уязвимости межприложенийного скриптинга могут быть использованы, когда контролируемый злоумышленником JavaScript-контент передается в WebView уязвимого приложения без проверки или очистки. В результате предоставленный злоумышленником JavaScript-код выполняется в контексте WebView приложения-жертвы. Затем вредоносный JavaScript-код может использовать те же разрешения, что и приложение-жертва, что может привести к краже конфиденциальных пользовательских данных и захвату учетной записи.
Меры по смягчению последствий
Отключить JavaScript
Если вашему приложению не требуется JavaScript, его отключение гарантирует, что он не станет угрозой:
Котлин
// 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);
Если вашему приложению требуется JavaScript, убедитесь, что вы являетесь владельцем или контролируете любой JavaScript-код, передаваемый в WebView. Избегайте выполнения произвольного JavaScript-кода WebView; см. рекомендации в следующем разделе.
Убедитесь, что в WebView загружается только ожидаемый контент.
При использовании таких методов, как shouldOverrideUrlLoading() , loadUrl() или evaluateJavascript() , убедитесь, что все передаваемые им URL-адреса проверяются. Как указывалось ранее, любой JavaScript, передаваемый в WebView, должен поступать только с ожидаемых доменов, поэтому важно проверять, что именно загружается.
Для получения полезных советов и примеров ознакомьтесь с документацией OWASP по проверке входных данных и этим контрольным списком безопасности Android для WebViews.
Настройте параметры безопасного доступа к файлам для WebView.
Обеспечение недоступности файлов может предотвратить выполнение произвольного JavaScript-кода внутри WebView. При обеспечении безопасности доступа к файлам следует учитывать следующие WebSettings :
- Отключите доступ к файлам. По умолчанию параметр
setAllowFileAccessимеет значениеTrueв API уровня 29 и ниже, что разрешает доступ к локальным файлам. В API уровня 30 и выше значение по умолчанию —False. Чтобы гарантировать запрет доступа к файлам, явно установитеsetAllowFileAccessвFalse Отключите доступ к контенту. Значение по умолчанию для параметра
setAllowContentAccess—True. Доступ к контенту по URL-адресу позволяет WebView загружать контент из поставщика контента, установленного в системе. Если вашему приложению не требуется доступ к контенту, установитеsetAllowContentAccessв значениеFalseчтобы предотвратить потенциальное неправомерное использование в случае атаки с использованием межприложенийного скриптинга.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);
Включить безопасный просмотр
Включите функцию «Безопасный просмотр» в файле AndroidManifest.xml , чтобы сканировать URL-адреса, передаваемые в WebView, на наличие фишинговых или вредоносных доменов.
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Ресурсы
- Документация по безопасному просмотру веб-страниц
- Справочник разработчика WebView
- Справочник разработчика по настройкам WebSettings для WebView
- документация разработчика setAllowFileAccess
- Справочник разработчика setAllowContentAccess