Intereting Posts
Как показать DialogFragment из Fragment в actionBar android Webview для масштабирования макета с типом вида AVD запускается каждый раз, когда я запускаю проект Android Android SharedPreferences не сохраняет Google Analytics SDK V2 для Android-приложения: новые пользователи, пользователи, активные пользователи, сеансы меня смущают В Google Play, как опубликовать приложение с использованием конкретного пакета, какие другие пакеты могут быть опубликованы и кем? Наиболее эффективный способ преобразования одного символа в CharSequence Android: layout_gravity не работает должным образом Потоковая передача в реальном времени через RTP на клиенте Android Я делаю Android IME. Как добавить элемент списка «Настройки» на экране настроек «Язык и клавиатура»? Почему ListView.getCheckedItemPositions () не возвращает правильные значения? OnClickListener не запускается для пользовательского представления Android GCM отправлен успешно, но не принят на некоторых устройствах Как ссылаться на один контроль от другого во время инфляции? Как использовать токен доступа Facebook в веб-обозревателе Android

Безопасность отправки конфиденциальных намерений в моем собственном приложении?

У меня есть активность, которая запрашивает имя пользователя и пароль, а затем запускает другое действие в моем приложении, чтобы завершить регистрацию пользователя. Я хочу отправить имя пользователя + пароль в качестве дополнительных намерений для второго действия. Что-то вроде:

Intent intent = new Intent(activity, SecondActivity.class); intent.putExtra("u", username); intent.putExtra("p", password); startActivity(intent); 

И мой манифест определяет SecondActivity как:

 <activity android:name="com.me.SecondActivity" android:label=""> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.me.FirstActivity" /> </activity> 

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

благодаря

Solutions Collecting From Web of "Безопасность отправки конфиденциальных намерений в моем собственном приложении?"

Ключевым моментом здесь является различие между подразумеваемыми намерениями и явными намерениями . В вашем примере используется явное намерение, так как вы указываете точный класс, который хотите запустить. Это нормально, потому что явные намерения не могут быть перехвачены и будут оставаться в вашем приложении.

Однако неявные намерения открывают несколько возможных атак. Эта статья более подробно рассказывает об этом. Я бы очень рекомендовал против использования неявных намерений передавать любую конфиденциальную информацию.

Из Android-документов :

Явные намерения указали компонент (через setComponent (ComponentName) или setClass (Контекст, класс)), который обеспечивает точный класс, который будет запущен.

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

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

Изменить :

Что касается сохранения Extent Extras на диске, да, это риск. Однако имейте в виду, что если у кого-то есть root-доступ к устройству и он использует его, чтобы попытаться выполнить поиск на диске для этой постоянной информации о намерениях, возможно, им будет проще получить такую ​​же информацию. Независимо от того, что вы делаете, кто-то с корневым доступом к физическому устройству, вероятно, сможет отключить этот пароль, если вы не сделаете очень отличное шифрование.

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

Возможно, сторонние приложения могут перехватывать общесистемные намерения. Я предлагаю зашифровать ваши данные, прежде чем отправлять их следующему намерению, а затем дешифровать его после его получения.

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