Перейти к содержанию

Данные из EditText попадают в WebView.loadurl()

Класс

| RawUserInputToWebViewIssue

Модуль

| Santaint (Marivanna)

Описание

Метод webView.loadurl(link) позволяет открыть произвольную страницу в контексте WebView приложения, кроме того при включенной настройке setAllowFileAcess(true) WebView может загружать и отображать файлы из приватной директории приложения (file:///data/data/app.package.id/somefile). Также этот метод позволяет запустить Javascript.

myWebView.run {
    settings.javaScriptEnabled = true
    settings.allowFileAccess = true
    loadUrl(link)
}

Проблема

Если данные из пользовательского ввода без проверки и ограничений попадают в webView.loadUrl(link), это может привести к обману пользователя (открытие произвольных URL, фишинг, краже данных из приватных файлов или утечке cookies).

Рекомендации

  • Не использовать данные из неконтролируемых источников для подстановки в метод loadUrl(link).
  • При необходимости - использовать данные только как часть выражения, не подставляя целым аргументом в метод.
  • Фильтровать опасные символы и слова, не подходящие по контексту применения (javascript, <, >, /, \, & и т.п.).
  • Отключать явно использование Javascript там, где это не нужно.
  • Ввести список допустимых доменов для перехода и запрещать загрузку любых других страниц в WebView.
  • Если необходимо использовать Javascript для доверенных страниц, его можно включать и выключать в методе webViewClient.onPageStarted(view, url, favico). Если URL из доверенного списка - Javascript включаем, если нет - выключаем.

Ссылки

  1. Android security checklist: WebView

  2. UrlQuerySanitizer

К началу