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

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

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

Спасибо

3 ответа

Решение

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

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

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

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

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

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

Редактировать:

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

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

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

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

Другие вопросы по тегам