Безопасность отправки конфиденциальных намерений в моем собственном приложении?
У меня есть действие, которое запрашивает имя пользователя и пароль, а затем запускает другое действие в моем приложении, чтобы завершить регистрацию пользователя. Я хочу отправить имя пользователя + пароль в качестве дополнения ко второму действию. Что-то вроде:
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 не может быть перехвачен и останется в вашем приложении.
Однако неявные намерения открывают несколько возможных векторов атаки. Эта статья рассказывает об этом более подробно. Я бы очень рекомендовал не использовать неявные намерения для передачи любой конфиденциальной информации.
Явные Intents указали компонент (через setComponent(ComponentName) или setClass(Context, Class)), который предоставляет точный класс для запуска.
Неявные намерения не указали компонент; вместо этого они должны включать в себя достаточно информации, чтобы система могла определить, какой из доступных компонентов лучше всего подходит для этой цели.
Как я уже говорил, для вашего примера в вопросе передача пароля через Intent является относительно безопасной, поскольку никакое другое приложение не может перехватить его во время выполнения. Но важно отметить, что это не всегда так, и использование неявных намерений теоретически может позволить намеренный перехват и раскрыть конфиденциальную информацию.
Редактировать:
Что касается сохранения Intent Extras на диске, да, это риск. Имейте в виду, однако, что если кто-то имеет root-доступ к устройству и использует его для поиска диска с этой информацией о постоянных намерениях, у них могут быть более простые способы получения той же информации. Независимо от того, что вы делаете, кто-то, имеющий root-доступ к физическому устройству, вероятно, сможет снять этот пароль, если вы не сделаете очень хорошее шифрование.
Моя рекомендация относительно общей перспективы безопасности - стараться не иметь дело с паролями напрямую в каком-либо долгосрочном или постоянном контексте. Пароли должны использоваться только во время входа в систему и сразу после этого удаляться (при условии, что вы проходите аутентификацию на сервере). Следовательно, при обычном использовании приложения (законный пользователь с реальным паролем) вам не нужно беспокоиться о том, что злоумышленник проверяет память устройства, потому что к тому времени, когда злоумышленник завладеет устройством, пароль давно смыт был удален из памяти.
Сторонние приложения могут перехватывать общесистемные цели. Я предлагаю зашифровать ваши данные перед отправкой в следующем намерении, а затем расшифровать их после получения.
Обработка паролей всегда должна быть очень краткосрочной. Рекомендуется использовать их только для запроса аутентификации, а затем отбросить их. Что касается специфики вашего вопроса, то есть отправки пароля между действиями через явное намерение, это безопасно в той степени, в которой никакое другое приложение не сможет перехватить его и просмотреть значение. Однако значение паролей необходимо где-то сохранить (память или диск), чтобы передать его второстепенному виду деятельности. Если он поддерживается на диске, его довольно легко найти. Если он хранится в памяти, злоумышленник, получивший доступ к вашему устройству, может его рутировать, а затем выполнить дамп памяти, чтобы просмотреть значения в памяти. Таким образом, не рекомендуется иметь дело с паролями таким способом.