Интересно о безопасности общих предпочтений.
Можно ли получить доступ к общим настройкам, даже если они были созданы в MODE_PRIV (0)?
Можно ли перечислить все доступные общие настройки, а затем получить все настройки из других приложений?
Подходит ли sharedpreferences для размещения конфиденциальных данных, таких как пароль или токен аутентификации?
Спасибо
android
security
sharedpreferences
Марек Себера
источник
источник
Ответы:
Общие настройки хранятся в виде файла в файловой системе на устройстве. По умолчанию они хранятся в каталоге данных приложения с установленными разрешениями файловой системы, которые позволяют только UID, с которым работает конкретное приложение, для доступа к ним. Таким образом, они являются частными, поскольку права доступа к файлам Linux ограничивают доступ к ним, как и в любой системе Linux / Unix.
Любой, у кого есть доступ к устройству на уровне root, сможет увидеть их, поскольку root имеет доступ ко всему в файловой системе. Кроме того, любое приложение, работающее с тем же UID, что и создаваемое приложение, сможет получить к ним доступ (обычно это не делается, и вам нужно предпринять определенные действия, чтобы заставить два приложения работать с одним и тем же UID, так что это, вероятно, не большое беспокойство). Наконец, если кто-то смог смонтировать файловую систему вашего устройства без использования установленной ОС Android, он также может обойти разрешения, ограничивающие доступ.
Если вас беспокоит такой доступ к вашим настройкам (или любым данным, записанным вашим приложением), вы захотите их зашифровать. Если они вас так беспокоят, вам нужно будет точно определить, какая защита необходима для уровня риска, который вы видите. Это очень подробно обсуждается в книге « Безопасность приложений для платформы Android» , опубликованной в декабре 2011 года (отказ от ответственности: я являюсь автором этой книги).
источник
SharedPreferences - это не что иное, как файлы XML в ваших телефонах / data / data / папке, поэтому любое приложение или пользователь с привилегиями суперпользователя на корневом устройстве может получить доступ к вашим SharedPreferences, даже если они были созданы с помощью MODE_PRIV
Тем не менее, есть способ защитить его от всех ... Пожалуйста, проверьте эту ссылку. Здесь вы можете хранить данные в pref с шифрованием, этот класс не требует пояснений и очень прост в использовании.
https://github.com/sveinungkb/encrypted-userprefs
По словам других, любой может получить к нему доступ, но в этом случае никто не может читать данные внутри него, поскольку он зашифрован. Поэтому его secure.For Utmost безопасности мое предложение будет генерировать ключ , используемый для шифрования во время выполнения , а не жесткое кодирование его. Есть много способов сделать это :)
источник
SharedPref
. Но что тогда делать с другим ключом? Если серьезно, то лучшим сценарием была бы отправка зашифрованного ключа и UID устройства на сервер с использованием SSL для хранения и извлечения по мере необходимости. Это потребует подключения, но позволит вам занести устройство в черный список и внезапно удалить все данные. Без постоянного подключения к Интернету любая попытка зашифровать данные не на 100% безопасна.Обычно нет, они не могут быть доступны другим приложениям, однако вы должны отметить, что SharedPreferences хранятся в виде файлов XML в
/data/data/
каталоге, что по сути означает, что любое приложение с привилегиями суперпользователя на корневом устройстве может получить доступ к вашимSharedPreference
s, даже если они были создан сMODE_PRIV
источник
Можно ли получить доступ к общим настройкам, даже если они были созданы в MODE_PRIV (0)?
По коду No. Но вы можете получить файл приложения, если у вас есть привилегии суперпользователя.
Можно ли перечислить все доступные общие настройки, а затем получить все настройки из других приложений?
Если вы суперпользователь (устройства с root-доступом), вы можете получить все личные файлы приложения.
Подходит ли sharedpreferences для размещения конфиденциальных данных, таких как пароль или токен аутентификации?
Нет. Его легко взломать. Если вы хотите поместить какие-либо конфиденциальные данные в общий файл настроек, вы можете зашифровать данные и сохранить. Вы можете хранить свой ключ шифрования в NDK / server.
источник