Приложение для Android с использованием Webview/javascript. в чем может быть проблема безопасности?

Я создаю веб-приложение для Android, используя Webview а также Javascript изготовление addJavascriptInterface(true),

Мое приложение будет содержать данные (html), которые будут загружены с внешнего сайта.

Я беспокоился о межсайтовых сценариях XSS/ безопасности моего приложения, так как я включаю addJavascriptInterface(true).

О чем я должен заботиться, чтобы любой вредоносный код не запускался в моем приложении?

3 ответа

Я нашел хорошее исследование из Сиракузского университета под названием " Атаки на 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);

Это отличное исследование, в котором описаны несколько различных способов атаки. Стоит прочитать!

Существует уязвимость в веб-обозревателе старше 4.2, когда вы включаете для него javascript.

Использование включения Javascript:

После включения JavaScript вы можете создавать интерфейсы между кодом приложения и кодом JavaScript.

Метод addJavascriptInterface (Object object, String name):

Метод addJavascriptInterface внедряет предоставленный Java-объект в WebView.

Объект внедряется в контекст JavaScript основного фрейма с использованием предоставленного имени, что позволяет получить доступ к методам объекта Java из JavaScript.

Для приложений под управлением Android 4.1 или более ранних версий доступны все открытые методы (включая унаследованные), поэтому, когда установленное пользователем приложение с помощью метода addJavascriptInterface загружает внешнюю веб-страницу, оно может использовать WebView и javascript для вызова объекта java (например, Javascript). конвейер "и использование рефлексии для вызова любого другого незарегистрированного Java-класса), что позволяет злоумышленникам вызывать Java-методы Android.

Исправление:

Для приложений под управлением Android 4.2 все открытые методы, аннотированные JavascriptInterface, могут быть доступны из JavaScript.

Поэтому, если вы разрабатываете приложение для SDK версии 17 или выше, вы должны добавить аннотацию @JavascriptInterface к любому методу, который вы хотите использовать в своем JavaScript.

Если вы не предоставите аннотацию, этот метод не будет доступен на вашей веб-странице при работе на Android 4.2 или выше.

Ссылка

Я написал эту суть, чтобы помочь с блокировкой веб-просмотра Android, подобно ответу @Noni A, который разрешает загрузку только для URL-адресов из белого списка путем переопределения shouldOverrideUrlLoading но также shouldInterceptRequest который я считаю, используется вызовами типа AJAX.

Другие вопросы по тегам