Co to jest „Android: allowBackup”?

267

Od nowej wersji podglądu ADT (wersja 21) mają nowe ostrzeżenie o strzępach, które mówi mi następną rzecz w pliku manifestu (w znaczniku aplikacji):

Powinien jawnie ustawić Androida: allowBackup na true lub false (domyślnie jest to prawda, i może to mieć wpływ na bezpieczeństwo danych aplikacji)

Na oficjalnej stronie internetowej napisali:

Kilka nowych kontroli: musisz wyraźnie zdecydować, czy aplikacja zezwala na tworzenie kopii zapasowych i sprawdzenie etykiety. Dodano nową flagę wiersza poleceń do ustawiania ścieżki biblioteki. Wiele ulepszeń do przyrostowej analizy kłaczków podczas edycji.

Co to za ostrzeżenie? Co to jest funkcja tworzenia kopii zapasowych i jak z niej korzystać?

Ponadto, dlaczego ostrzeżenie mówi mi, że ma to wpływ na bezpieczeństwo? Jakie są wady i zalety wyłączenia tej funkcji?


Istnieją dwie koncepcje tworzenia kopii zapasowej manifestu:

  • „Android: allowBackup ” pozwala na tworzenie kopii zapasowych i przywracanie za pomocą adb, jak pokazano tutaj :

Określa, czy zezwolić aplikacji na uczestnictwo w infrastrukturze tworzenia kopii zapasowych i przywracaniu. Jeśli ten atrybut ma wartość false, nie zostanie wykonana kopia zapasowa ani przywracanie aplikacji, nawet w przypadku kopii zapasowej całego systemu, która w przeciwnym razie spowodowałaby zapisanie wszystkich danych aplikacji przez adb. Domyślna wartość tego atrybutu to true.

Jest to uważane za problem z bezpieczeństwem, ponieważ ludzie mogą tworzyć kopie zapasowe aplikacji przez ADB, a następnie pobierać prywatne dane aplikacji na komputer.

Myślę jednak, że to nie problem, ponieważ większość użytkowników nie wie, co to jest adb, a jeśli to zrobi, będzie wiedziała, jak zrootować urządzenie. Funkcje ADB działałyby tylko wtedy, gdy urządzenie ma włączoną funkcję debugowania, a to wymaga włączenia przez użytkownika.

Tak więc dotyczy to tylko użytkowników, którzy podłączą swoje urządzenia do komputera i włączą funkcję debugowania. Jeśli mają na komputerze złośliwą aplikację korzystającą z narzędzi ADB, może to być problematyczne, ponieważ aplikacja może odczytać dane z prywatnego magazynu.

Myślę, że Google powinien po prostu dodać funkcję, która jest domyślnie wyłączona, w kategorii programistów, aby umożliwić tworzenie kopii zapasowych i przywracanie aplikacji przez ADB.

  • „Android: backupAgent ” pozwala korzystać z funkcji tworzenia kopii zapasowych i przywracania w chmurze, jak pokazano tutaj i tutaj :

Nazwa klasy, która implementuje, jest agentem kopii zapasowej aplikacji, podklasą BackupAgent. Wartością atrybutu powinna być w pełni kwalifikowana nazwa klasy (na przykład „com.example.project.MyBackupAgent”). Jednak jako skrót, jeśli pierwszym znakiem nazwy jest kropka (na przykład „.MyBackupAgent”), jest ona dodawana do nazwy pakietu określonej w elemencie. Nie ma wartości domyślnej. Nazwę należy podać.

To nie jest problem bezpieczeństwa.

programista Androida
źródło
Myślę, że powinieneś usunąć te dodatkowe informacje w swojej Edycji, ponieważ odnosi się to do usługi Kopia zapasowa w chmurze, zamiast narzędzia do tworzenia kopii zapasowych ADB, do którego odnosi się ten problem (zgodnie z odpowiedzią Tora Norbye)
Tony Chan
@Turbo tak masz rację. myślę, że nie był tak aktualizowany, kiedy go przeczytałem, ale teraz jest jasne. zaktualizuję pytanie. dzięki. Zastanawiam się, czy funkcja tworzenia kopii zapasowej adb może być używana na zrootowanych urządzeniach, nawet w przypadku aplikacji, dla których ustawiono na false
programista Androida
2
@IgorGanapolsky, więc jestem teraz całkowicie zdezorientowany. dlaczego wspomnieli o tym w 2 zupełnie różnych funkcjach? czy jest możliwe, że ta sama flaga odpowiada za obie funkcje? a może to pomyłka? myślisz, że powinienem odznaczyć odpowiedź, którą zaznaczyłem?
programista Androida
1
@androiddeveloper Przyczyną istnienia tego samego dokładnego atrybutu w obu funkcjach jest prawdopodobnie to, że jest przeznaczony do tego samego ostatecznego celu: tworzenia kopii zapasowych danych. Czy to na urządzeniu, czy w chmurze ...
IgorGanapolsky
3
Jako użytkownik Androida chciałbym rozważyć każdego, kto to znajdzie, i powiem, że nie mogę znieść aplikacji - i jest ich wiele - wyłączających tworzenie kopii zapasowych. Jeśli dana osoba ma dostęp do odblokowanego telefonu, powinna mieć możliwość skopiowania z niego danych. Wszelkie środki bezpieczeństwa w tym momencie są bez znaczenia, ponieważ zawsze mogą zrootować telefon, aby uzyskać dane. Ale jako użytkownik, możliwość tworzenia kopii zapasowej danych aplikacji (bez rootowania i wyłączania mojego bitu Knox) ​​jest niezwykle cenna. To naprawdę frustrujące, że tak wiele aplikacji nie pozwala na to, i szczerze mówiąc, że Android w ogóle ma ten przełącznik.
Nathan Stretch

Odpowiedzi:

139

W przypadku tego ostrzeżenia dotyczącego kłaczków, podobnie jak dla wszystkich innych ostrzeżeń dotyczących kłaczków, zwróć uwagę, że możesz uzyskać pełniejsze wyjaśnienie niż tylko to, co jest w jednowierszowym komunikacie o błędzie; nie musisz przeszukiwać sieci, aby uzyskać więcej informacji.

Jeśli używasz kłaczków za pośrednictwem Eclipse, otwórz widok ostrzeżeń kłaczków, w którym możesz wybrać błąd kłaczków i zobaczyć dłuższe wyjaśnienie, lub wywołaj szybką poprawkę (Ctrl-1) na linii błędu, a jedną z sugestii jest „ Wyjaśnij ten problem ”, który również wyświetli pełniejsze wyjaśnienie. Jeśli nie korzystasz z Eclipse, możesz wygenerować raport HTML z lint ( lint --html <filename>), który zawiera pełne wyjaśnienia obok ostrzeżeń lub możesz poprosić lint o wyjaśnienie konkretnego problemu. Na przykład problem związany z allowBackupma identyfikator AllowBackup(pokazany na końcu komunikatu o błędzie), więc pełniejsze wyjaśnienie to:

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

Priority: 3 / 10
Severity: Warning
Category: Security

allowBackupAtrybut określa, czy dane aplikacja może zostać zarchiwizowane i odrestaurowany, co zostało udokumentowane tutaj .

Domyślnie ta flaga jest ustawiona na true. Po ustawieniu tej flagi użytkownik truemoże wykonać kopię zapasową danych aplikacji i przywrócić je za pomocą adb backupi adb restore.

Może to mieć konsekwencje bezpieczeństwa dla aplikacji. adb backupumożliwia użytkownikom, którzy włączyli debugowanie USB, kopiowanie danych aplikacji z urządzenia. Po utworzeniu kopii zapasowej użytkownik może odczytać wszystkie dane aplikacji. adb restoreumożliwia tworzenie danych aplikacji ze źródła określonego przez użytkownika. Po przywróceniu aplikacje nie powinny zakładać, że dane, uprawnienia do plików i uprawnienia do katalogu zostały utworzone przez samą aplikację.

Ustawienie allowBackup="false"wyłącza aplikację zarówno z kopii zapasowej, jak i przywracania.

Aby naprawić to ostrzeżenie, zdecyduj, czy aplikacja powinna obsługiwać tworzenie kopii zapasowych i ustawić jawnie android:allowBackup=(true|false)

Kliknij tutaj, aby uzyskać więcej informacji

Tor Norbye
źródło
35
użytkownicy zwykle nawet nie wiedzą, co to jest adb, a jeśli tak, to prawdopodobnie wiedzą, jak zrootować urządzenie i sami pobrać dane, prawda?
deweloper Androida
1
@Tor Kiedy mówisz „kopiuj dane aplikacji z urządzenia”, masz na myśli kopiowanie z data / data / com.myapp czy z sdcard? Poprzedni katalog jest chroniony i nie można go odczytać, dopóki urządzenie nie zostanie zrootowane.
IgorGanapolsky
2
Więc dla wyjaśnienia ta kopia zapasowa, do której odwołuje się Lint, jest narzędziem ADB, a nie usługą tworzenia kopii zapasowych w chmurze, prawda? Wydaje się, że wiele innych odpowiedzi jest niejasnych.
Tony Chan,
1
@IgorGanapolsky Myślę, że użycie ADB spowoduje skopiowanie prywatnych danych i dlatego pojawia się ostrzeżenie. Myślę, że dotyczy to tylko osób, które mają włączoną funkcję debugowania i podłączają swoje urządzenie do komputera. tacy ludzie są zwykle zaawansowanymi użytkownikami lub programistami, więc powinni wiedzieć, co robią. ryzyko bezpieczeństwa spoczywa na osobach, które zrobiły to przez pomyłkę i zainstalowały na komputerze złośliwą aplikację, która korzysta z narzędzia ADB do wykonywania tych operacji. istnieje aplikacja do tworzenia kopii zapasowych i przywracania bez roota, o nazwie „Helium”: play.google.com/store/apps/…
programista Androida
„Jeśli korzystasz z linków za pośrednictwem Eclipse ..” powinieneś prawdopodobnie przeprowadzić migrację do AndroidStudio, ponieważ wtyczka ADT jest przestarzała.
throws_exceptions_at_you
26

Oto, co tak naprawdę oznacza tworzenie kopii zapasowych:

Usługa kopii zapasowej systemu Android umożliwia kopiowanie trwałych danych aplikacji do zdalnego magazynu „w chmurze” w celu zapewnienia punktu przywracania danych aplikacji i ustawień. Jeśli użytkownik przywróci ustawienia fabryczne lub dokona konwersji na nowe urządzenie z systemem Android, system automatycznie przywróci dane kopii zapasowej po ponownej instalacji aplikacji. W ten sposób użytkownicy nie będą musieli odtwarzać swoich poprzednich danych ani ustawień aplikacji.

~ Pobrane z http://developer.android.com/guide/topics/data/backup.html

Możesz zarejestrować się w tej usłudze tworzenia kopii zapasowych jako programista tutaj: https://developer.android.com/google/backup/signup.html

Typami danych, których kopie zapasowe można wykonać, są pliki, bazy danych, preferencje współdzielone, pamięć podręczna i biblioteka lib. Zazwyczaj są one przechowywane w katalogu /data/data/[com.myapp] urządzenia, które jest chronione przed odczytem i nie można uzyskać do niego dostępu, chyba że masz uprawnienia root.

AKTUALIZACJA : Możesz zobaczyć tę flagę na liście w dokumentacji api BackupManager : BackupManager

Igor Ganapolski
źródło
4
Myślę, że zmiany w interfejsie API na poziomie 23 wskazują, że jest to poprawna odpowiedź. Oto dokumenty szkoleniowe dotyczące zmian: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65
8

Nie jest to wyraźnie wspomniane, ale w oparciu o następujące dokumenty, myślę, że implikuje to, że aplikacja musi zadeklarować i wdrożyć BackupAgent, aby kopia zapasowa danych działała, nawet w przypadku, gdy parametr enableBackup ma wartość true (czyli domyślna wartość).

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

Yuntao
źródło
co jeśli aplikacja nie ma nic związanego z backupAgent? czy mimo to Android automatycznie utworzy kopię zapasową swoich danych?
programista Androida
1
poprawna odpowiedź znajduje się tutaj: stackoverflow.com/a/13806946/878126 . wygląda na to, że nie ma to nic wspólnego z backupAgent. zaktualizowałem również moje pytanie, aby pokazać, o co w tym wszystkim chodzi.
programista Androida
3

Jest to kwestia prywatności . Zaleca się, aby nie zezwalać użytkownikom na tworzenie kopii zapasowej aplikacji, która zawiera wrażliwe dane. Mając dostęp do plików kopii zapasowych (tj. Kiedy android:allowBackup="true"), można modyfikować / czytać zawartość aplikacji nawet na urządzeniu niezrootowanym.

Rozwiązanie - użyj android:allowBackup="false"w pliku manifestu.

Możesz przeczytać ten post, aby uzyskać więcej informacji: Hakowanie aplikacji na Androida za pomocą technik tworzenia kopii zapasowych

Ayaz Alifov
źródło
1
poważnie podchodzisz do tej odpowiedzi w 2017 roku? przeczytaj to tutaj developer.android.com/guide/topics/data/…
batmaci
Możesz wyłączyć tworzenie kopii zapasowych, ustawiając android: allowBackup na false. Możesz to zrobić, jeśli aplikacja może odtworzyć swój stan za pomocą innego mechanizmu lub jeśli aplikacja obsługuje poufne informacje, których Android nie powinien wykonać kopii zapasowej.
Edgar Khimich
Obecnie możesz wykluczyć poufne dane z kopii zapasowych za pomocą manifestów atrybutu.
Yousha Aleayoub