Данные из сторонних источников могут попасть в WebView JS
Класс
| ThirdpartyExecuteWebViewJSIssue
Модуль
| Santaint (Marivanna)
Описание
В операционной системе Android приложение может получать данные из различных источников: пользовательский ввод, чтение бэкапа, Intents, данные других приложений и т.п. В случае, если эти данные загружаются в WebView, в котором включено исполнение Javascript, это может привести к запуску произвольного JS-кода в контексте WebView.
Проблема
Запуск произвольного JS-кода в WebView может приводить к утечке данных приложения и пользователя:
- Кража cookies.
- Кража данных пользователя из контекста document.
- Обман пользователя (фишинг и другие атаки).
- Запуск нативных методов приложения через JavascriptInterface.
Пример запуска произвольного JS-кода в WebView через deeplink:
Uri data = getIntent().getData();
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAllowFileAccess(true);
webView.setWebChromeClient(new WebChromeClient());
String queryParameter = data.getQueryParameter("url");
if (queryParameter != null) {
webView.loadUrl(data.getQueryParameter("url"));
return;
}
Рекомендации
- При настройке WebView не следует включать Javascript без необходимости.
- Если наличие JS требуется для некоторых страниц, можно включать и выключать JS в зависимости от того, является страница доверенной или нет.
- Проводить санитизацию поступающих данных и не допускать проброса в контекст страницы строк, содержащих символы
<
,>
,&
,'
,#
,:
,%
, а также слов в любом регистреscript
,javascript
.