Данные из EditText попадают в WebView.loadurl()
Класс
| RawUserInputToWebViewIssue
Модуль
| Santaint (Marivanna)
Описание
Метод webView.loadurl(link)
позволяет открыть произвольную страницу в контексте WebView приложения, кроме того при включенной настройке setAllowFileAcess(true)
WebView может загружать и отображать файлы из приватной директории приложения (file:///data/data/app.package.id/somefile). Также этот метод позволяет запустить Javascript.
Проблема
Если данные из пользовательского ввода без проверки и ограничений попадают в webView.loadUrl(link)
, это может привести к обману пользователя (открытие произвольных URL, фишинг, краже данных из приватных файлов или утечке cookies).
Рекомендации
- Не использовать данные из неконтролируемых источников для подстановки в метод
loadUrl(link)
. - При необходимости - использовать данные только как часть выражения, не подставляя целым аргументом в метод.
- Фильтровать опасные символы и слова, не подходящие по контексту применения (
javascript
,<
,>
,/
,\
,&
и т.п.). - Отключать явно использование Javascript там, где это не нужно.
- Ввести список допустимых доменов для перехода и запрещать загрузку любых других страниц в WebView.
- Если необходимо использовать Javascript для доверенных страниц, его можно включать и выключать в методе
webViewClient.onPageStarted(view, url, favico)
. Если URL из доверенного списка - Javascript включаем, если нет - выключаем.