1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-android-app-sec-guidebook

Клонировать/Скачать
6.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 20:24 c13bfb7

6. Сложные проблемы

В Android из-за спецификаций операционной системы Android или функций, предоставляемых операционной системой Android, трудно обеспечить безопасность реализации приложения. Эти функции могут быть использованы в злонамеренных целях третьими лицами или случайно использованы пользователями, что всегда создаёт риск возникновения проблем с безопасностью, таких как утечка информации. В этой главе мы рассмотрим планы по снижению рисков, связанных с этими функциями, и выделим несколько важных тем для обсуждения.

6.1 Риск утечки информации из буфера обмена

Копирование и вставка — это функции, которые пользователи часто используют непреднамеренно. Например, многие пользователи используют эти функции для хранения любопытной или важной информации, записывают содержимое электронной почты или веб-страницы в блокнот, или копируют и вставляют пароли из блокнота, чтобы не забыть их заранее. Хотя эти действия кажутся случайными, на самом деле существует скрытая угроза кражи обрабатываемой пользователем информации.

Этот риск связан с механизмом копирования и вставки в операционной системе Android. Информация, скопированная пользователем или приложением, временно хранится в буферной области, называемой буфером обмена. Когда пользователь или приложение вставляет информацию из буфера обмена, она распространяется среди других приложений. Поэтому функция буфера обмена представляет риск утечки информации. Это связано с тем, что буфер обмена является единственным объектом в системе, и любое приложение может использовать ClipboardManager для получения информации, хранящейся в буфере обмена в любое время. Это означает, что вся информация, которую пользователь копирует или вырезает, будет доступна вредоносным приложениям.

Поэтому, учитывая спецификации операционной системы Android, разработчики приложений должны принять меры для снижения вероятности утечки информации.

6.1.1 Примеры кода

Грубо говоря, есть два подхода к снижению риска утечки информации через буфер обмена:

  1. Принятие мер при копировании данных из других приложений в ваше приложение.
  2. Принятие мер при копировании данных из вашего приложения в другие приложения.

Давайте сначала обсудим подход (1). Предположим, что пользователь копирует строку из другого приложения, такого как блокнот, веб-браузер или почтовое приложение, а затем вставляет её в EditText вашего приложения. На практике в этом случае практически нет способа предотвратить утечку чувствительной информации из-за копирования и вставки. Поскольку в Android нет функции контроля над операциями копирования третьих сторон. Таким образом, помимо объяснения пользователю риска утечки чувствительной информации при копировании и вставке, нет другого способа, кроме как позволить пользователю самостоятельно уменьшить количество операций.

Следующий подход — (2), когда пользователь копирует чувствительную информацию, отображаемую в приложении. Эффективный способ предотвращения утечки информации в этом случае — запретить копирование и вырезание из представлений (таких как TextView, EditText и т. д.). Если в представлениях, используемых для ввода/вывода чувствительной информации (например, личной информации), отключены функции копирования/вставки, информация никогда не будет передана через буфер обмена в вашем приложении.

Существует несколько способов запретить копирование/вставку. Этот раздел описывает простой и эффективный метод: один из способов — отключить длительное нажатие на представление, другой способ — удалить пункты «Копировать» и «Вырезать» из меню выбора строки.

Необходимость принятия мер можно определить на основе процесса, показанного на рисунке 6.1-1. На рисунке 6.1–1 «Тип ввода установлен как атрибут пароля» означает, что тип ввода во время работы приложения должен быть одним из следующих трёх типов. В этом случае, поскольку копирование и вставка по умолчанию запрещены, меры не требуются.

  • InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD
  • InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD
  • InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD

Далее в разделе подробно описывается каждый пример кода.

6.1.1.1 Удаление пунктов «Копировать» и «Вырезать» из меню выбора строк

До Android 3.0 (API Level 11) нельзя было использовать метод TextView.setCustomSelectionActionMODECallback(). В этом случае самый простой способ запретить копирование и вставку — отключить долгое нажатие на представлении. Отключение долгого нажатия на представлении можно настроить в файле layout.xml.

Ниже приведён пример кода для удаления пунктов «Копировать» и «Вырезать» из меню выбора строк в EditText.

Основные моменты:

  1. Удалить пункт «android.R.id.copy» из меню выбора строк.
  2. Удалить пункт «android.R.id.cut» из меню выбора строк. Далее приведён пример кода для Activity, который использует упомянутый ClipboardListeningService.

ClipboardListeningActivity.java

пакет org.jssec.android.clipboard;

импорт android.app.Activity;
импорт android.content.ComponentName;
импорт android.content.Intent;
импорт android.os.Bundle;
импорт android.util.Log;
импорт android.view.View;

общественный класс ClipboardListeningActivity расширяет Activity {

    частный статический окончательный String TAG = "ClipboardListeningActivity";

    переопределить
    публичный void onCreate(Bundle savedInstanceState) {
        супер.onCreate(savedInstanceState);
        setContentView(R.layout.activity_clipboard_listening);
    }

    публичное void onClickStartService(View view) {
        если (view.getId() != R.id.start_service_button) {
            Log.w(TAG, "Идентификатор View неверен.");
        } ещё {
            ComponentName cn = startService(
                новое намерение(ClipboardListeningActivity.this, ClipboardListeningService.class));
            если (cn == null) {
                Log.e(TAG, "Не удалось запустить сервис.");
            }
        }
    }

    публичное void onClickStopService(View view) {
        если (view.getId() != R.id.stop_service_button) {
            Log.w(TAG, "Идентификатор View неверен.");
        } ещё {
            stopService(новое намерение(ClipboardListeningActivity.this, ClipboardListeningService.class));
        }
    }
}

До сих пор мы представили метод получения данных, хранящихся на буфере обмена. Также можно использовать метод ClipboardManager.setPrimaryClip() для хранения новых данных в буфере обмена.

Обратите внимание, что метод setPrimaryClip() заменит информацию, хранящуюся в буфере обмена, поэтому информация, скопированная или вырезанная пользователем, может быть потеряна. При предоставлении пользовательских функций копирования и вырезания с использованием этих методов необходимо тщательно продумать и реализовать их, чтобы предотвратить случайное изменение содержимого буфера обмена, и уведомить пользователя об изменении через диалоговое окно.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-android-app-sec-guidebook.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-android-app-sec-guidebook.git
oschina-mirror
wizardforcel-android-app-sec-guidebook
wizardforcel-android-app-sec-guidebook
master