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.