Intereting Posts
Избежать потери данных из-за прерывания при сохранении файлов на Android? Разница между getExternalFilesDir и getExternalStorageDirectory () Android заморозится в OpenGL | ES (процессор может быть привязан, снова пытается.) Могу ли я использовать tcpdump для получения HTTP-запросов, заголовка ответа и тела ответа? Параметр Android withText не работает для кнопок панели действий на Huawei MediaPad (T1-A21L) Наложение клавиш клавиатуры на клавиатуре Android NullPointerException на ViewPager с Recyclerview Должен ли Java-финализатор действительно избегать также для управления жизненным циклом собственных одноранговых объектов? Android: перемещение вида при перемещении касания (ACTION_MOVE) Как я могу связать предварительно созданную библиотеку с Android NDK? Android PopupWindow и WRAP_CONTENT не работают вместе Android, как включить, не беспокоить (dnd) программно Как узнать, какие файлы не были сохранены в Android Studio? Завершить работу из другой деятельности Как заполнять ListPreference динамически при запуске onPreferenceClick?

Приложение Android с помощью Webview / javascript. Что может быть проблемой безопасности?

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

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

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

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

Solutions Collecting From Web of "Приложение Android с помощью Webview / javascript. Что может быть проблемой безопасности?"

Существует уязвимость в веб-просмотре старше 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-класса), который позволяет злоумышленникам вызывать Java-методы Android.

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

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

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

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

Справка

Я нашел хорошее исследование в Сиракузском университете под названием Attacks on WebView в Android-системе , которое иллюстрирует, как использование WebView с помощью addJavascriptInterface(true) может активировать два вида атак. Один из вредоносных веб-сайтов, которые теперь будут иметь доступ к вашему приложению через телефонные службы, назначенные для интерфейса (например, контакты, камера и т. Д.) Или два, вредоносное приложение может иметь доступ к уязвимому веб-сайту, вставив код в Его Javascript.

В основном исправление для разработчиков приложений заключается в том, чтобы гарантировать, что в WebView другой веб-сайт не может быть просмотрен в вашем 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); 

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

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