Безпека Android SharedPreference


118

Мені цікаво щодо безпеки спільних переваг.

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

Дякую



Варто поглянути, з приємними відповідями. Спільні переваги багато говорять про стиль програмування розробника.
Vishwa Ratna

Відповіді:


232

Параметри спільного користування зберігаються як файл у файловій системі на пристрої. За замовчуванням вони зберігаються в каталозі даних програми з набором дозволів файлової системи, які дозволяють лише UID, з яким працює конкретна програма, для доступу до них. Таким чином, вони є приватними настільки, наскільки дозволи для файлів Linux обмежують доступ до них, як і в будь-якій системі Linux / Unix.

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

Якщо ви стурбовані таким доступом до своїх уподобань (або будь-яких даних, написаних вашою заявою), вам потрібно буде зашифрувати їх. Якщо вас це турбує, вам потрібно буде розібратися, який саме захист необхідний для рівня ризику, який ви бачите. Про це йде дуже широка дискусія у програмі Безпека додатків для платформи Android , щойно опублікована в грудні 2011 року (відмова від відповідальності: я автор цієї книги).


2
Чи є офіційна документація, яка говорить про це? У вас є посилання?
clu

26

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

Проте є спосіб захистити його від усіх ... Будь ласка, перевірте це посилання. Тут ви можете зберігати дані в pref із шифруванням, клас зрозумілий для себе та дуже простий у використанні.

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

За словами інших, кожен може отримати до нього доступ, але в цьому випадку ніхто не може читати дані всередині нього, оскільки вони зашифровані. Тому його secure.For Utmost безпеки мою пропозицію буде генерувати ключ , який використовується для шифрування під час виконання , а не жорстке кодування його. Є багато способів зробити це :)


8
то як зберегти згенерований ключ?
Олайїнка

3
@Olayinka Було б безпечніше зашифрувати це ще одним ключем і зберегти його в SharedPref. Але потім, що робити з іншим ключем? Серйозно, однак, найкращим сценарієм було б надсилання зашифрованого ключа та UID пристрою на сервер із використанням SSL для зберігання в ньому та отримання необхідних запитів. Це вимагає підключення, але дозволить вам зробити чорний список пристрою і раптом перезавантажити всі дані. Без постійного підключення до Інтернету будь-яка спроба шифрування даних не є 100% безпечною.
Пауло Авеляр

Я використовував вище рішення ... він працює 9 з 10 times..but Я отримую помилку: 1e06b065: функції шифру: EVP_DecryptFinal_ex: BAD_DECRYPT »в times..Does кого є ідеї?
Радж Trivedi

3
@PauloAvelar Використовуйте Android KeyStore для тривалого зберігання та пошуку криптографічних ключів. Ключі не зберігаються в програмі, тому вони не можуть бути порушені. За умови, що бібліотека не використовує. Він зберігає секрет у коді, таким чином він не є безпечним.
apex39

13

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


3

Чи можливо отримати доступ до спільних налаштувань, навіть якщо вони були створені в MODE_PRIV (0)?

За кодом Ні. Але ви можете отримати файл програми, якщо у вас є привілейований супер користувач.

Чи можливо перелічити всі доступні спільні налаштування, а потім отримати всі налаштування з інших програм?

Якщо ви супер користувач (корінні пристрої), ви можете витягнути всі приватні файли програми.

Чи є спільним налаштуваннями гарне місце для розміщення конфіденційних даних, таких як пароль або маркер авторизації?

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


Як це можна легко зламати?
Джон Сардінья

Так, форма запитання @Jo
Cuong Vo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.