Категория OWASP: MASVS-CODE: Качество кода
Обзор
WebView — это встроенный компонент браузера в приложениях Android, который облегчает отображение веб-контента в приложении. Он отображает HTML, CSS и JavaScript в пользовательском интерфейсе приложения.
Межприложенные сценарии широко связаны с выполнением вредоносного кода в контексте приложения-жертвы. Для целей данной документации тема будет ограничена внедрением вредоносного кода JavaScript в уязвимый WebView.
Когда приложение принимает вредоносный код JavaScript в WebView без достаточной проверки или очистки, оно становится уязвимым для межприложенных сценариев.
Влияние
Уязвимости межприложенных сценариев могут быть использованы, когда контролируемый злоумышленником контент 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
Ява
// 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. Не разрешайте WebView выполнять произвольный JavaScript, см. рекомендации в следующем разделе.
Убедитесь, что в WebView загружается только ожидаемый контент.
При использовании таких методов, как shouldOverrideUrlLoading()
, loadUrl()
или evaluateJavascript()
,
убедитесь, что все передаваемые им URL-адреса проверяются. Как говорилось ранее, любой код JavaScript, передаваемый в WebView, должен поступать только из ожидаемых доменов, поэтому важно проверять, что загружается.
Прочтите документацию по проверке ввода OWASP и этот контрольный список безопасности Android для WebViews, чтобы получить полезные советы и примеры.
Установите параметры безопасного доступа к файлам для WebView
Обеспечение доступности файлов может предотвратить выполнение произвольного JavaScript в WebViews. При обеспечении доступа к файлам следует учитывать следующие 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 = false
java
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