Что такое "android: allowBackup"?

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

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

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

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

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

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


Существует два понятия резервного копирования для манифеста:

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

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

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

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

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

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

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

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

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

Ответ 1

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

Если вы используете lint через Eclipse, либо откройте представление предупреждений lint, где вы можете выбрать ошибку lint и увидеть более подробное объяснение, либо вызвать quickfix (Ctrl-1) в строке ошибки и одно из предложений "Объясните эту проблему", которая также будет раскрывать более полное объяснение. Если вы не используете Eclipse, вы можете создать отчет HTML из lint (lint - html), который включает полные объяснения рядом с предупреждениями, или вы можете попросить lint объяснить конкретную проблему. Например, проблема, связанная с allowBackup, имеет идентификатор "AllowBackup" (отображается в конце сообщения об ошибке), поэтому более полное объяснение:

$./lint --show AllowBackup

AllowBackup

Сводка: убедитесь, что allowBackup явно установлен в приложении манифеста

Приоритет: 3/10 Уровень важности: предупреждение Категория: Безопасность

Атрибут allowBackup определяет, могут ли резервные копии данных приложения и восстановлено. Это документировано здесь.

По умолчанию этот флаг имеет значение true. Если для этого флага установлено значение true, данные приложения могут быть скопированы и восстановлены пользователем с помощью резервного копирования adb и восстановление adb.

Это может иметь последствия безопасности для приложения. Резервное копирование adb позволяет пользователи, которые включили USB-отладку для копирования данных приложения из устройство. После резервного копирования все данные приложения могут быть прочитаны пользователем. ADB restore позволяет создавать данные приложения из источника, указанного в пользователь. После восстановления приложения не должны предполагать, что данные, файл разрешения и разрешения каталога были созданы приложением сам по себе.

Настройка allowBackup="false" выбирает приложение из резервной копии и восстановить.

Чтобы устранить это предупреждение, решите, должно ли ваше приложение поддерживать резервное копирование, и явно установить android:allowBackup=(true|false) "

Нажмите здесь для Подробнее

Ответ 2

Вот что такое резервное копирование в этом смысле действительно означает:

Служба резервного копирования Android позволяет копировать данные постоянных приложений в удаленное облачное хранилище, чтобы обеспечить точку восстановления данных и настроек приложения. Если пользователь выполняет factory reset или конвертируется в новое устройство на базе Android, система автоматически восстанавливает ваши резервные данные при повторной установке приложения. Таким образом, вашим пользователям не нужно воспроизводить свои предыдущие данные или настройки приложения.

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

Вы можете зарегистрироваться для этой службы резервного копирования в качестве разработчика здесь: https://developer.android.com/google/backup/signup.html

Тип данных, которые могут быть скопированы, - это файлы, базы данных, sharedPreferences, cache и lib. Они обычно хранятся в вашем каталоге /data/data/ [com.myapp], который защищен от чтения и недоступен, если у вас нет привилегий root.

UPDATE: Вы можете увидеть этот флаг, указанный в файле BackupManager api doc: BackupManager

Ответ 3

Это явно не упоминается, но, основываясь на следующих документах, я думаю, что подразумевается, что приложение должно объявлять и внедрять 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.com/guide/topics/data/backup.html

Ответ 4

Когда мы должны установить android: allowBackup = false

Вам не нужен root для резервного копирования данных с устройства Android на ПК, вам нужен только физический доступ и включение отладки в меню разработчика. Это позволяет копировать данные из внутреннего хранилища приложения, которое может содержать конфиденциальную информацию, которую вы не хотите позволять кому-то украсть, например токен доступа к facebook.

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

Обратите внимание, что для того, чтобы обойти это, вам необходимо укоротить телефон, и в этом случае конфиденциальные данные во внутренней памяти будут удалены, когда произойдет factory reset.

Ответ 5

рекомендуется запретить пользователям резервировать приложение, если оно содержит конфиденциальные данные. Имея доступ к файлам резервных копий, вы можете изменить содержимое приложения на ненагруженном устройстве.

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

http://resources.infosecinstitute.com/android-hacking-security-part-15-hacking-android-apps-using-backup-techniques/