Что такое «Android: allowBackup»?

267

Начиная с новой предварительной версии ADT (версия 21) , у них есть новое предупреждение lint, в котором говорится следующее о файле манифеста (в теге приложения):

Должен явно установить для android: allowBackup значение true или false (по умолчанию это true, что может иметь некоторые последствия для безопасности данных приложения)

На официальном сайте они написали:

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

Что это за предупреждение? Что такое функция резервного копирования и как ее использовать?

Кроме того, почему предупреждение говорит мне, что оно имеет последствия для безопасности? Каковы недостатки и преимущества отключения этой функции?


Для манифеста есть две концепции резервного копирования:

  • «android: allowBackup » позволяет выполнять резервное копирование и восстановление через adb, как показано здесь :

Разрешить ли приложению участвовать в инфраструктуре резервного копирования и восстановления. Если для этого атрибута задано значение false, резервное копирование или восстановление приложения никогда не будет выполняться, даже если выполняется резервное копирование всей системы, в противном случае все данные приложения будут сохранены через adb. Значение по умолчанию для этого атрибута - true.

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

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

Таким образом, будут затронуты только пользователи, которые подключают свои устройства к ПК и включают функцию отладки. Если на их ПК установлено вредоносное приложение, использующее инструменты ADB, это может быть проблематично, поскольку приложение может считывать данные частного хранилища.

Я думаю, что Google должен просто добавить функцию, которая по умолчанию отключена, в категорию разработчиков, чтобы разрешить резервное копирование и восстановление приложений через ADB.

  • «android: backupAgent » позволяет использовать функцию резервного копирования и восстановления в облаке, как показано здесь и здесь :

Имя класса, который реализует агент резервного копирования приложения, подкласс BackupAgent. Значением атрибута должно быть полное имя класса (например, «com.example.project.MyBackupAgent»). Однако для краткости, если первый символ имени является точкой (например, «.MyBackupAgent»), он добавляется к имени пакета, указанному в элементе. Там нет по умолчанию. Имя должно быть указано.

Это не проблема безопасности.

разработчик Android
источник
Я думаю, что вы должны удалить эту дополнительную информацию в своем редакторе, потому что это относится к облачной службе резервного копирования, а не к инструменту резервного копирования ADB, на который фактически ссылается эта проблема (согласно ответу Tor Norbye)
Тони Чен,
@ Турбо да, ты прав. я думаю, что это не было обновлено так много, когда я прочитал это, но теперь это ясно. я обновлю вопрос. Спасибо. Интересно, можно ли использовать функцию резервного копирования adb на корневых устройствах даже для приложений, для которых установлено значение false.
Android-разработчик
2
@IgorGanapolsky, так что я сейчас совершенно сбит с толку. почему они упомянули это в двух совершенно разных функциях? Возможно ли, что один и тот же флаг отвечает за обе функции? а может это ошибка? Как вы думаете, я должен снять галочку с ответа, который я поставил?
Android-разработчик
1
@androiddeveloper Причина того, что один и тот же точный атрибут существует в обеих функциях, возможно, заключается в том, что он предназначен для одной и той же конечной цели: резервного копирования данных. Будь то на устройстве или в облаке ...
Игорь Ганапольский
3
Как пользователь Android, я хотел бы взвесить любого, кто найдет это, и сказать, что я не могу вынести приложения - а их много - которые отключают резервное копирование. Если человек имеет доступ к разблокированному телефону, он должен иметь возможность скопировать данные с него. Любая мера «безопасности» в этот момент бессмысленна, так как они всегда могут получить root-данные для получения данных. Но как пользователь возможность создавать резервные копии данных моего приложения (без рутирования и отключения моего бита Knox) ​​чрезвычайно важна. Это действительно разочаровывает, что так много приложений запрещают это, и честно говоря, у Android даже есть этот переключатель вообще.
Натан Стретч

Ответы:

139

Для этого предупреждения о задержке, как и для всех других предупреждений о задержке, обратите внимание, что вы можете получить более полное объяснение, чем то, что содержится в сообщении об ошибке в одну строку; Вам не нужно искать в Интернете для получения дополнительной информации.

Если вы используете lint через Eclipse, либо откройте представление предупреждений о lint, где вы можете выбрать ошибку lint и посмотреть более подробное объяснение, либо вызвать быстрое исправление (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, и если они знают, они, вероятно, знают, как получить root права на свое устройство и получить данные в любом случае, не так ли?
Android-разработчик
1
@Tor Когда вы говорите «копировать данные приложения с устройства», вы имеете в виду копирование из data / data / com.myapp или из sdcard? Первый каталог защищен и не может быть прочитан, пока устройство не рутировано.
Игорь Ганапольский
2
Итак, для пояснения, что резервное копирование, на которое ссылается Lint, является инструментом ADB, а не службой облачного резервного копирования, верно? Кажется, многие другие ответы запутались.
Тони Чан,
1
@IgorGanapolsky Я думаю, что использование ADB позволит скопировать личные данные, и поэтому есть предупреждение. Я думаю, что это касается только людей, у которых включена функция отладки и которые подключают свое устройство к ПК. такие люди обычно являются опытными пользователями или разработчиками, поэтому они должны знать, что они делают. угроза безопасности для людей, которые сделали это по ошибке и установили на ПК вредоносное приложение, которое использует инструмент ADB для выполнения этих операций. есть приложение для резервного копирования и восстановления без рута, под названием «Helium»: play.google.com/store/apps/…
разработчик для Android
«Если вы используете lint через Eclipse…», вам, вероятно, следует перейти на AndroidStudio, поскольку плагин ADT устарел.
throws_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/[com.myapp] вашего устройства, который защищен от чтения и недоступен, если у вас нет привилегий root.

ОБНОВЛЕНИЕ : Вы можете видеть этот флаг в списке в api doc BackupManager : BackupManager

IgorGanapolsky
источник
4
Я думаю, что изменения в уровне API 23 указывают на то, что это правильный ответ. Вот учебные документы по изменениям: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65
8

Это явно не упоминается, но, исходя из следующих документов, я думаю, что подразумевается, что приложению необходимо объявить и реализовать BackupAgent для того, чтобы резервное копирование данных работало, даже в том случае, если для allowBackup задано значение true (которое является значение по умолчанию).

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

Yuntao
источник
Что делать, если приложение не имеет ничего общего с BackupAgent? Будет ли Android автоматически создавать резервные копии своих данных все же?
Android-разработчик
1
правильный ответ находится здесь: stackoverflow.com/a/13806946/878126 . кажется, что это не имеет никакого отношения к агенту резервного копирования. Я также обновил свой вопрос, чтобы показать, что это такое.
Android-разработчик
3

Это проблема конфиденциальности . Рекомендуется запретить пользователям создавать резервные копии приложения, если оно содержит конфиденциальные данные. Имея доступ к файлам резервных копий (т. Е. Когда android:allowBackup="true"), можно изменять / читать содержимое приложения даже на некорневом устройстве.

Решение - использовать android:allowBackup="false"в файле манифеста.

Вы можете прочитать этот пост, чтобы получить больше информации: Взлом приложений Android с помощью методов резервного копирования

Аяз Алифов
источник
1
ты серьезно с этим ответом в 2017 году? пожалуйста, прочитайте это здесь developer.android.com/guide/topics/data/…
batmaci
Вы можете отключить резервное копирование, установив для android: allowBackup значение false. Возможно, вы захотите сделать это, если ваше приложение может воссоздать свое состояние с помощью какого-либо другого механизма или если ваше приложение имеет дело с конфиденциальной информацией, которую Android не должен резервировать.
Эдгар Химич
В настоящее время вы можете исключить конфиденциальные данные из резервных копий с помощью атрибутов в манифесте.
Юша Алеауб