Intereting Posts
Нанесение внешней тени при рисовании изображения Невозможно создать проект с помощью android-ndk и Android Studio Touchmove & vmousover не работает в приложении Cordova / PhoneGap для Android Как работает приложение Android Password Manager? В чем разница между портретным портретом и userPortrait Как сделать вызовы JNI из Сервиса, даже если приложение закрыто? Есть ли способ показать пользовательское исключение в предупреждении под Android? Android Studio переводит проект на другой компьютер? Android & Phonegap: ошибка возникает при загрузке функции javascript с помощью loadUrl Как я должен обрабатывать тайм-ауты сервера и ответы на код ошибки на сообщение http в приложении Android? Android-смежные кнопки в режиме списка автоматически Инициализировать массив в массиве Список поддерживаемых авторизаций для выбранных учетных записей Установить выравнивание текста в центре в spinner в android Ormlite для 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 с помощью фильтра поддельных намерений? Кроме того, мне интересно, что происходит с дополнительными намерениями, они когда-либо сохранялись на диске операционной системой? Кто-то может посмотреть на них там, если так.

благодаря

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

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

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

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

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

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

Изменить :

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

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

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

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