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

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

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 с помощью фильтра поддельного намерения? Кроме того, я задаюсь вопросом, что происходит с дополнительными намерениями, они когда-либо сохранялись на диске операционной системой? Кто-то может посмотреть на них там, если так.

Спасибо

Ответ 1

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

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

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

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

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

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

Изменить:

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

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

Ответ 2

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

Ответ 3

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