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


118

Интересно о безопасности общих предпочтений.

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

Спасибо



Стоит взглянуть, с хорошими ответами. Общие настройки многое говорят о стиле программирования разработчика.
Вишва Ратна

Ответы:


232

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

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

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


2
Есть ли официальная документация, в которой говорится об этом? Есть ли у вас ссылки?
clu 05

26

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

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

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

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


8
тогда как сохранить сгенерированный ключ?
Olayinka

3
@Olayinka Было бы безопаснее зашифровать это еще одним ключом и сохранить его в файле SharedPref. Но что тогда делать с другим ключом? Если серьезно, то лучшим сценарием была бы отправка зашифрованного ключа и UID устройства на сервер с использованием SSL для хранения и извлечения по мере необходимости. Это потребует подключения, но позволит вам занести устройство в черный список и внезапно удалить все данные. Без постоянного подключения к Интернету любая попытка зашифровать данные не на 100% безопасна.
Пауло Авелар

Я использовал вышеупомянутое решение ... оно работает 9 раз из 10 .. но я получаю сообщение об ошибке: 1e06b065: Функции шифрования: EVP_DecryptFinal_ex: BAD_DECRYPT "временами .. Есть ли у кого-нибудь идея?
Радж Триведи,

3
@PauloAvelar Используйте Android KeyStore для длительного хранения и извлечения криптографических ключей. Ключи не хранятся в приложении, поэтому их нельзя скомпрометировать. Предоставленная библиотека не использует его. Он сохраняет секрет в коде, поэтому это небезопасно.
apex39

13

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


3

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

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

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

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

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

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


Как его легко взломать?
Джон Сардинья

Да, форма вопроса @Jo
Vo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.