Android-приложение с использованием Webview/javascript. что может быть проблемой безопасности?
Я создаю веб-приложение для Android с помощью Webview
и Javascript
, создавая addJavascriptInterface(true)
.
В моем приложении будут содержаться данные (html), которые будут загружены с внешнего сайта.
Я беспокоился о XSS/безопасности моего приложения для межсайтового скриптинга, поскольку я включаю addJavascriptInterface (true).
Какими вещами я должен заниматься, чтобы какой-либо вредоносный код не запускался в моем приложении?
Ответы
Ответ 1
Уязвимость существует в веб-браузере старше 4.2, если для него используется Включить javascript.
Использование разрешающего Javascript:
Как только JavaScript включен, вы можете создавать интерфейсы между кодом приложения и кодом JavaScript.
addJavascriptInterface (объект Object, String name):
Метод addJavascriptInterface внедряет предоставленный объект Java в WebView.
Объект вводится в контекст JavaScript основного фрейма, используя предоставленное имя, и это позволяет получить доступ к методам объектов Java из JavaScript.
Для приложений под управлением Android 4.1 или старше доступны все общедоступные методы (в том числе унаследованные), поэтому, когда пользователь, установленный приложением с методом addJavascriptInterface, загружает внешнюю веб-страницу, он может использовать WebView и javascript для вызова java-объекта (например, "конвейер Javascript и использование рефлексии для вызова любого другого незарегистрированного Java-класса), который позволяет злоумышленникам вызывать методы Androids Java.
Исправление:
Для приложений под управлением Android 4.2 все общедоступные методы, которые аннотируются с помощью JavascriptInterface, могут быть доступны из JavaScript.
Итак, если вы разрабатываете приложение для SDK версии 17 или выше, вы должны добавить аннотацию @JavascriptInterface к любому методу, который вы хотите использовать для своего JavaScript.
Если вы не предоставите аннотацию, этот метод недоступен вашей веб-странице при работе на Android 4.2 или выше.
Ссылка
Ответ 2
Я нашел хорошее исследование в Сиракузском университете под названием Атаки на WebView в системе Android, в котором показано, как использование WebView
с addJavascriptInterface(true)
может включать два вида от атак. Один из вредоносных веб-сайтов, которые теперь будут иметь доступ к вашему приложению через телефонные службы, назначенные интерфейсу (например, Контакты, камера и т.д.) Или два, вредоносное приложение может иметь доступ к уязвимому веб-сайту, вставив код в его Javascript.
В основном исправление для разработчиков приложений заключается в том, чтобы гарантировать, что в WebView
другой URL, кроме указанного, разрешено просматривать в вашем WebView. Например, скажите, что вы вставляете Facebook.com в свой WebView
, вы можете написать код, чтобы гарантировать, что если будет нажата любая другая реклама в Facebook, внешний браузер откроется вместо отображения в вашем WebView
. Это наиболее часто встречается в iFrames... хотя статья более подробно описывает это.
Вот пример, который они представляют, который не гарантирует, что никакой другой URL-адрес не просматривается в WebView
, отличном от оригинала:
WebViewclient wvclient = New WebViewClient() {
// override the "shouldOverrideUrlLoading" hook.
public boolean shouldOverrideUrlLoading(WebView view,String url){
if(!url.startsWith("http://www.facebook.com")){
Intent i = new Intent("android,intent.action.VIEW",
Uri.parse(url));
startActivity(i);
}
}
// override the "onPageFinished" hook.
public void onPageFinished(WebView view, String url) { ...}
}
webView.setWebViewClient(wvclient);
Это отличное исследование и описывает несколько различных способов нападений. Стоит читать!
Ответ 3
Я написал этот gist, чтобы помочь заблокировать Android Webview, аналогично @Noni Ответ: он разрешает загрузку только для белых URL-адресов переопределяя shouldOverrideUrlLoading
, но также shouldInterceptRequest
, который, как я полагаю, используется вызовами типа AJAX.