Android. Как полностью защитить значения, хранящиеся в общих настройках?

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


person srj    schedule 29.10.2015    source источник
comment
Вы беспокоитесь, что другие приложения могут прочитать ваши данные? В этом случае вы можете сделать настройки для приложения   -  person Tim    schedule 29.10.2015
comment
^ это все равно сломается на рутированном телефоне   -  person Skynet    schedule 29.10.2015


Ответы (3)


Данные, хранящиеся в SharedPreferences, если они созданы с помощью Context.MODE_PRIVATE, доступны только для вашего собственного приложения.

Однако, если телефон пользователя рутирован, то данные могут быть прочитаны корневыми приложениями (даже если они созданы с помощью Context.MODE_PRIVATE).

Нет никакого способа избежать этого, никогда. Но вы можете принять меры предосторожности, например зашифровать данные в SharedPreferences.
Хорошим примером этого является библиотека SecurePreferences: https://github.com/scottyab/secure-preferences

person Moonbloom    schedule 29.10.2015
comment
спасибо, чувак .. я считаю, что то, что ты предложил, - это конец пути, то есть шифрование и хранение данных. - person srj; 29.10.2015

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

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

Любой, у кого есть доступ к устройству на уровне root, сможет их увидеть, поскольку root имеет доступ ко всему в файловой системе.

Если вас беспокоит такой доступ к вашим настройкам (или любым данным, записанным вашим приложением), вам следует зашифровать их. Вы можете погуглить.

person Prateek Mishra    schedule 29.10.2015

Попробуйте это https://prashantsolanki3.github.io/Secure-Pref-Manager/ для облегчения работы с общими настройками он также шифрует ключ и значение перед сохранением в настройках.

Пример кода для сохранения значения:

SecurePrefManager.with(this)
            .set("user_name")
            .value("LoremIpsum")
            .go();
person Prashant Solanki    schedule 06.11.2015