Що таке "android: enableBackup"?


267

Оскільки нова версія попереднього перегляду ADT (версія 21) , у них з'являється нове попередження про вказівку, яке повідомляє мені про наступне у файлі маніфесту (у тезі програми):

Слід чітко встановити android: enableBackup на true або false (це істинно за замовчуванням, і це може мати певні наслідки для безпеки даних програми)

На офіційному веб-сайті вони написали:

Кілька нових перевірок: ви повинні чітко вирішити, чи дозволяє ваша програма створювати резервні копії та перевірити мітку. Новий прапор командного рядка для налаштування шляху бібліотеки. Під час редагування багато вдосконалених покрокових аналізів ворсинок.

Що це за застереження? Що таке функція резервного копіювання і як її використовувати?

Крім того, чому попередження говорить мені, що це має наслідки для безпеки? Які недоліки та переваги відключення цієї функції?


Існує дві концепції резервного копіювання для маніфесту:

  • "android: enableBackup " дозволяє створити резервну копію та відновити через adb, як показано тут :

Дозволити програмі брати участь у резервній копії та відновленні інфраструктури. Якщо для цього атрибута встановлено значення "false", резервне копіювання або відновлення програми ніколи не буде виконано, навіть за допомогою повної системи резервного копіювання, яка в іншому випадку призведе до збереження всіх даних програми через adb. Значення цього атрибуту за замовчуванням є істинним.

Це вважається проблемою безпеки, оскільки люди можуть створити резервну копію вашої програми через ADB, а потім отримати приватні дані вашої програми на свій ПК.

Однак я думаю, що це не проблема, оскільки більшість користувачів не знають, що таке adb, і якщо вони будуть, вони також будуть знати, як викорінити пристрій. Функції ADB працюватимуть лише в тому випадку, якщо на пристрої ввімкнена функція налагодження, і для цього потрібен користувач.

Так, це вплине лише на користувачів, які підключають свої пристрої до ПК та включають функцію налагодження. Якщо на їхньому ПК є шкідливий додаток, який використовує засоби ADB, це може бути проблематично, оскільки програма може читати дані приватного зберігання.

Я думаю, що Google повинен просто додати функцію, відключену за замовчуванням, до категорії розробників, щоб дозволити резервне копіювання та відновлення програм через ADB.

  • "android: backupAgent " дозволяє використовувати функцію резервного копіювання та відновлення хмари, як показано тут і тут :

Назва класу, який реалізує, є резервним агентом програми, підкласом BackupAgent. Значенням атрибута має бути повністю кваліфіковане ім’я класу (наприклад, "com.example.project.MyBackupAgent"). Однак, як скорочення, якщо перший символ імені є періодом (наприклад, ".MyBackupAgent"), він додається до імені пакета, зазначеного в елементі. За замовчуванням немає. Ім'я має бути вказане.

Це не проблема безпеки.


Я думаю, ви повинні видалити цю додаткову інформацію у своєму редагуванні, оскільки це стосується хмарної служби резервного копіювання, а не інструменту резервного копіювання ADB, на який ця проблема фактично посилається (відповідно до відповіді Tor Norbye)
Тоні Чан,

@Turbo так, ти прав. я думаю, що це було не так оновлено, коли я читав його, але тепер це зрозуміло. я оновлю питання. Дякую. мені цікаво, чи можна використовувати функцію резервного копіювання на кореневих пристроях навіть для програм, які встановили її на помилкову.
андроїд розробник

2
@IgorGanapolsky, тож я зараз зовсім заплутаний. чому вони згадували його у 2 абсолютно різних ознаках? чи можливо той самий прапор відповідає за обидві функції? а може, це помилка? ти вважаєш, що мені слід скасувати відповідь, яку я поставив?
андроїд розробник

1
@androiddeveloper Причина того, що той самий точний атрибут існує для обох функцій, ймовірно, тому, що він призначений для однієї і тієї ж кінцевої мети: резервного копіювання даних. Будь то на пристрої чи в хмарі ...
ІгорГанапольський

3
Як користувач Android, я хотів би зважитись на тих, хто це знайшов, і сказати, що я не витримую додатків - а їх багато - які відключають резервне копіювання. Якщо у людини є доступ до розблокованого телефону, він повинен мати можливість копіювати дані з нього. Будь-який захід "безпеки" в цей момент є безглуздим, оскільки вони завжди могли викорінити телефон для отримання даних. Але, як користувач, можливість створити резервну копію даних моїх додатків (без вкорінення та відключення мого біта Knox) ​​надзвичайно цінна. Це дуже неприємно, що так багато додатків забороняють це, і якщо чесно, що в Android взагалі є цей перемикач.
Натан Стретч

Відповіді:


139

Для цього попередження про ворсинки, як і для всіх інших попереджень про ворсинки, зауважте, що ви можете отримати більш повне пояснення, ніж те, що є в одному рядку повідомлення про помилку; не потрібно шукати в Інтернеті додаткову інформацію.

Якщо ви використовуєте lint через Eclipse, відкрийте подання попередження про ворсинку, де ви можете вибрати помилку ворсу і переглянути більш тривале пояснення, або попросіть швидке виправлення (Ctrl-1) у рядку помилок, і одна з пропозицій - " Поясніть це питання ", де також з’явиться більш повне пояснення. Якщо ви не використовуєте Eclipse, ви можете створити HTML-звіт із lint ( lint --html <filename>), який містить повні пояснення поруч із попередженнями, або ви можете попросити lint пояснити певну проблему. Наприклад, проблема, що стосується, allowBackupмає ідентифікатор AllowBackup(показаний наприкінці повідомлення про помилку), тому більш повне пояснення:

$ ./lint --show AllowBackup
AllowBackup
-----------
Summary: Ensure that allowBackup is explicitly set in the application's
manifest

Priority: 3 / 10
Severity: Warning
Category: Security

allowBackupАтрибут визначає , є дані додатка можуть бути збережені і відновлені, як описано тут .

За замовчуванням для цього прапора встановлено значення true. Якщо цей прапор встановлений true, дані програми можуть бути створені резервними копіями та відновлені користувачем за допомогою adb backupта adb restore.

Це може мати наслідки для безпеки для програми. adb backupдозволяє користувачам, які включили налагодження USB, копіювати дані програми з пристрою. Після резервного копіювання користувач може прочитати всі дані програми. adb restoreдозволяє створювати дані програми з джерела, вказаного користувачем. Після відновлення програми не повинні вважати, що дозволи, дані, дозволи та каталог створені самою програмою.

Налаштування allowBackup="false"вибирає додаток із резервного копіювання та відновлення.

Щоб виправити це попередження, вирішіть, чи повинна ваша програма підтримувати резервне копіювання та встановити явно android:allowBackup=(true|false)

Клацніть тут для отримання додаткової інформації


35
користувачі зазвичай навіть не знають, що таке adb, і якщо вони, вони, ймовірно, знають, як викорінити свій пристрій і все одно отримати дані самостійно, ні?
андроїд розробник

1
@Tor Якщо ви скажете "копіювати дані програми з пристрою", ви маєте на увазі копію з даних / data / com.myapp або з sdcard? Колишній каталог захищений і не може бути прочитаний, якщо пристрій не вкорінюється.
ІгорГанапольський

2
Тож для уточнення цієї резервної копії, на яку посилається Lint, є інструментом ADB, а не хмарною службою резервного копіювання, правда? Здається, багато інших відповідей заплуталися.
Тоні Чан

1
@IgorGanapolsky Я думаю, що за допомогою ADB буде скопійовано приватні дані, і тому є попередження. Я думаю, що лише люди, у яких включена функція налагодження і підключають свій пристрій до ПК. такі люди зазвичай є споживачами енергії або розробниками, тому вони повинні знати, що вони роблять. ризик для безпеки є для людей, які зробили це помилково та встановили на ПК шкідливий додаток, який використовує інструмент ADB для здійснення цих операцій. є додаток для резервного копіювання та відновлення без кореня під назвою "Гелій": play.google.com/store/apps/…
андроїд розробник

"Якщо ви використовуєте lint через Eclipse ..", ймовірно, ви повинні перейти на AndroidStudio, оскільки плагін ADT застарілий.
bacs_exceptions_at_you

26

Ось що насправді означає резервне копіювання:

Служба резервного копіювання Android дозволяє копіювати постійні дані програми у віддалене "хмарне" сховище, щоб забезпечити точку відновлення даних та налаштувань програми. Якщо користувач виконує заводські скидання або перетворює на новий пристрій під керуванням Android, система автоматично відновлює ваші резервні дані при повторній інсталяції програми. Таким чином, вашим користувачам не потрібно відтворювати свої попередні дані чи налаштування програми.

~ Взяте з http://developer.android.com/guide/topics/data/backup.html

Ви можете зареєструватися для цієї послуги резервного копіювання як розробник тут: https://developer.android.com/google/backup/signup.html

Тип даних, які можна створити для резервного копіювання, - це файли, бази даних, sharedPreferences, кеш і lib. Вони, як правило, зберігаються у каталозі /data/data/ evidencecom.myapp] вашого пристрою, який захищений від читання і не можна отримати доступ, якщо у вас немає root прав.

ОНОВЛЕННЯ : Цей прапор можна побачити у списку api doc BackupManager : BackupManager


4
Я думаю, що зміни в рівні 23 API вказують на це правильну відповідь. Ось навчальні документи щодо змін: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65

8

Це прямо не згадується, але виходячи з наступних документів, я думаю, мається на увазі, що додатку потрібно декларувати та реалізовувати BackupAgent для того, щоб резервне копіювання даних працювало, навіть у випадку, коли для параметраBiBup встановлено значення true (що є значення за замовчуванням).

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android. com / довідник / теми / дані / backup.html


що робити, якщо в додатку немає нічого пов’язаного з backupAgent? чи все-таки буде Android резервне копіювання даних автоматично?
андроїд розробник

1
правильну відповідь можна знайти тут: stackoverflow.com/a/13806946/878126 . здається, що це не має нічого спільного з backupAgent. Я також оновив своє запитання, щоб показати, що це все.
андроїд розробник

3

Це стосується конфіденційності . Рекомендується заборонити користувачам робити резервну копію програми, якщо вона містить конфіденційні дані. Маючи доступ до файлів резервного копіювання (тобто коли android:allowBackup="true"), можна змінювати / читати вміст програми навіть на не вкоріненому пристрої.

Рішення - використання android:allowBackup="false"у файлі маніфесту.

Ви можете прочитати цю публікацію, щоб отримати додаткову інформацію: Злом додатків Android за допомогою методів резервного копіювання


1
ви серйозно ставитеся до цієї відповіді у 2017 році? будь ласка, прочитайте його тут developer.android.com/guide/topics/data/…
batmaci

Ви можете відключити резервне копіювання, встановивши android: enableBackup на false. Ви можете зробити це, якщо ваш додаток зможе відтворити його стан через якийсь інший механізм або якщо ваш додаток має конфіденційну інформацію, яку Android не повинен створювати резервні копії.
Едгар Хіміч

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