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