Безопасность Android SharedPreference

Мне интересно узнать о безопасности общих настроек.

Можно ли получить доступ к sharedpreferences, даже если они были созданы в MODE_PRIV (0)?
Можно ли перечислить все доступные sharedpreferences и затем извлечь все настройки из других приложений?
Является ли sharedpreferences хорошим местом для размещения конфиденциальных данных, таких как пароль или токен аутентификации?

Спасибо

Ответ 1

Общие настройки хранятся в виде файла в файловой системе на устройстве. по умолчанию они хранятся в каталоге данных приложения с установленными разрешениями файловой системы, которые позволяют только UID, с которым работает конкретное приложение, получать к ним доступ. Таким образом, они являются частными, поскольку права доступа к файлам в Linux ограничивают доступ к ним так же, как и в любой системе Linux/Unix.

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

Если вы беспокоитесь о таком доступе к вашим предпочтениям (или любым данным, написанным вашим приложением), то вы захотите зашифровать их. Если вас это беспокоит, вам нужно будет точно определить, какой уровень защиты необходим для того уровня риска, который вы видите. Об этом очень подробно говорится в Application Security для платформы Android, только что опубликованной в декабре 2011 года (отказ от ответственности: я являюсь автором этой книги).

Ответ 2

SharedPreferences - это не что иное, как файлы XML в ваших телефонах/данных/данных/папках. Поэтому любое приложение или пользователь с привилегиями суперпользователя на корневом устройстве может получить доступ к вашим SharedPreferences, даже если они были созданы с помощью MODE_PRIV

Тем не менее есть способ защитить его от всех... Проверьте эту ссылку. Здесь вы можете хранить данные в pref с помощью шифрования, класс является понятным и очень простым в использовании.

https://github.com/sveinungkb/encrypted-userprefs

Как говорят другие, любой может получить к нему доступ, но в этом случае никто не может читать данные внутри него, поскольку он зашифрован. Поэтому его безопасность. Для безопасности Utmost мое предложение будет состоять в том, чтобы сгенерировать ключ, используемый для шифрования во время выполнения, а не жесткое его кодирование. Есть много способов сделать это:)

Ответ 3

Как правило, нет, к ним не могут обращаться другие приложения, однако следует отметить, что SharedPreferences хранятся в виде файлов XML в каталоге /data/data/, что по существу означает, что любое приложение с привилегиями суперпользователя на корневом устройстве может получить доступ к вашему SharedPreference s, даже если они были созданы с помощью MODE_PRIV

Ответ 4

Можно ли получить доступ к общим настройкам, даже если они были созданы в MODE_PRIV (0)?

По коду нет. Но вы можете получить файл приложения, если у вас есть права суперпользователя.

Можно ли перечислить все доступные общие настройки и затем извлечь все настройки из других приложений?

Если вы являетесь суперпользователем (рутированные устройства), вы можете извлечь все личные файлы приложения.

Является ли sharedpreferences хорошим местом для размещения конфиденциальных данных, таких как пароль или токен аутентификации?

Нет. Это может быть легко взломано. Если вы хотите поместить какие-либо конфиденциальные данные в общий файл настроек, вы можете зашифровать данные и сохранить их. Вы можете хранить свой ключ шифрования в NDK/сервере.