Android android là gì: allowBackup?


267

Kể từ phiên bản xem trước ADT mới (phiên bản 21) , chúng có cảnh báo lint mới cho tôi biết điều tiếp theo trên tệp kê khai (trong thẻ ứng dụng):

Nên đặt rõ ràng android: allowBackup thành đúng hoặc sai (theo mặc định là đúng và điều đó có thể có một số hàm ý bảo mật cho dữ liệu của ứng dụng)

Trong trang web chính thức , họ đã viết:

Một vài kiểm tra mới: bạn phải quyết định rõ ràng liệu ứng dụng của bạn có cho phép sao lưu hay không và kiểm tra nhãn. Có một cờ dòng lệnh mới để thiết lập đường dẫn thư viện. Nhiều cải tiến để phân tích lint gia tăng trong khi chỉnh sửa.

Cảnh báo này là gì? Tính năng sao lưu là gì và làm cách nào để sử dụng nó?

Ngoài ra, tại sao cảnh báo cho tôi biết nó có ý nghĩa bảo mật? Những nhược điểm và lợi thế của việc vô hiệu hóa tính năng này là gì?


Có hai khái niệm về sao lưu cho tệp kê khai:

  • "Android: allowBackup " cho phép sao lưu và khôi phục thông qua adb, như được hiển thị ở đây :

Có cho phép ứng dụng tham gia vào cơ sở hạ tầng sao lưu và khôi phục hay không. Nếu thuộc tính này được đặt thành false, sẽ không có bản sao lưu hoặc khôi phục ứng dụng nào được thực hiện, ngay cả khi sao lưu toàn hệ thống sẽ khiến tất cả dữ liệu ứng dụng được lưu thông qua adb. Giá trị mặc định của thuộc tính này là đúng.

Đây được coi là một vấn đề bảo mật vì mọi người có thể sao lưu ứng dụng của bạn thông qua ADB và sau đó lấy dữ liệu riêng tư của ứng dụng của bạn vào PC của họ.

Tuy nhiên, tôi nghĩ đó không phải là vấn đề, vì hầu hết người dùng không biết adb là gì và nếu có, họ cũng sẽ biết cách root thiết bị. Các chức năng ADB sẽ chỉ hoạt động nếu thiết bị có tính năng gỡ lỗi được kích hoạt và điều này cần người dùng kích hoạt nó.

Vì vậy, chỉ những người dùng kết nối thiết bị của họ với PC và kích hoạt tính năng gỡ lỗi mới bị ảnh hưởng. Nếu họ có một ứng dụng độc hại trên PC sử dụng các công cụ ADB, điều này có thể gây ra vấn đề vì ứng dụng có thể đọc dữ liệu lưu trữ riêng tư.

Tôi nghĩ rằng Google chỉ nên thêm một tính năng bị tắt theo mặc định, trong danh mục nhà phát triển, để cho phép sao lưu và khôi phục ứng dụng thông qua ADB.

  • "Android: backupAgent " cho phép sử dụng tính năng sao lưu và khôi phục của đám mây, như được hiển thị ở đâyđây :

Tên của lớp triển khai là tác nhân sao lưu của ứng dụng, một lớp con của BackupAgent. Giá trị thuộc tính phải là một tên lớp đủ điều kiện (chẳng hạn như "com.example.project.MyBackupAgent"). Tuy nhiên, như một cách viết tắt, nếu ký tự đầu tiên của tên là một khoảng thời gian (ví dụ: ".MyBackupAgent"), thì nó được gắn vào tên gói được chỉ định trong phần tử. Không có mặc định. Tên phải được chỉ định.

Đây không phải là một vấn đề bảo mật.


Tôi nghĩ bạn nên xóa thông tin bổ sung đó trong Chỉnh sửa của mình, vì đó là đề cập đến dịch vụ Đám mây sao lưu, thay vì công cụ sao lưu ADB mà vấn đề này thực sự đang tham chiếu (theo câu trả lời của Tor Norbye)
Tony Chan

@Turbo vâng bạn đúng. Tôi nghĩ rằng nó đã không được cập nhật nhiều khi tôi đọc nó, nhưng bây giờ thì rõ ràng. tôi sẽ cập nhật câu hỏi cảm ơn. Tôi tự hỏi nếu tính năng sao lưu adb có thể được sử dụng trên các thiết bị đã root ngay cả đối với các ứng dụng đã đặt thành sai.
nhà phát triển Android

2
@IgorGanapolsky vì vậy tôi hoàn toàn bối rối ngay bây giờ. Tại sao họ lại đề cập đến nó trong 2 tính năng hoàn toàn khác nhau? Có thể cùng một cờ chịu trách nhiệm cho cả hai tính năng? hoặc có thể đó là một sai lầm? Bạn có nghĩ rằng tôi nên bỏ chọn câu trả lời tôi đã đánh dấu?
nhà phát triển Android

1
@androiddeveloper Lý do mà cùng một thuộc tính chính xác tồn tại trên cả hai tính năng có lẽ là vì nó được dành cho cùng một mục đích cuối cùng: sao lưu dữ liệu. Cho dù trên thiết bị hay trên đám mây ...
IgorGanapolsky

3
Là một người dùng Android, tôi muốn cân nhắc cho bất kỳ ai tìm thấy điều này và nói rằng tôi không thể chịu được các ứng dụng - và có rất nhiều - vô hiệu hóa sao lưu. Nếu một người có quyền truy cập vào điện thoại đã được mở khóa, họ sẽ có thể sao chép dữ liệu từ điện thoại đó. Bất kỳ biện pháp "bảo mật" nào tại thời điểm đó đều vô nghĩa, vì họ luôn có thể root điện thoại để lấy dữ liệu. Nhưng là một người dùng, việc có thể sao lưu dữ liệu ứng dụng của tôi (mà không cần root và vấp bit Knox của tôi) là vô cùng quý giá. Thật sự rất bực mình khi có rất nhiều ứng dụng không cho phép và thành thật mà nói, Android thậm chí còn có công tắc này.
Nathan Stretch

Câu trả lời:


139

Đối với cảnh báo lint này, như đối với tất cả các cảnh báo lint khác, lưu ý rằng bạn có thể nhận được lời giải thích đầy đủ hơn chỉ là những gì trong thông báo lỗi một dòng; bạn không cần phải tìm kiếm trên web để biết thêm.

Nếu bạn đang sử dụng lint qua Eclipse, hãy mở khung nhìn cảnh báo lint, trong đó bạn có thể chọn lỗi lint và xem giải thích dài hơn hoặc gọi sửa chữa nhanh (Ctrl-1) trên dòng lỗi và một trong những gợi ý là " Giải thích vấn đề này ", cũng sẽ đưa ra một lời giải thích đầy đủ hơn. Nếu bạn không sử dụng Eclipse, bạn có thể tạo một báo cáo HTML từ lint ( lint --html <filename>) bao gồm các giải thích đầy đủ bên cạnh các cảnh báo hoặc bạn có thể yêu cầu lint giải thích một vấn đề cụ thể. Ví dụ: vấn đề liên quan đến allowBackupcó id AllowBackup(hiển thị ở cuối thông báo lỗi), vì vậy lời giải thích đầy đủ hơn là:

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

Priority: 3 / 10
Severity: Warning
Category: Security

Các allowBackupthuộc tính quyết định nếu dữ liệu của một ứng dụng có thể được sao lưu và phục hồi, như ghi nhận ở đây .

Theo mặc định, cờ này được đặt thành true. Khi cờ này được đặt thành true, dữ liệu ứng dụng có thể được sao lưu và khôi phục bởi người dùng bằng cách sử dụng adb backupadb restore.

Điều này có thể có hậu quả bảo mật cho một ứng dụng. adb backupcho phép người dùng đã bật gỡ lỗi USB để sao chép dữ liệu ứng dụng khỏi thiết bị. Sau khi sao lưu, tất cả dữ liệu ứng dụng có thể được đọc bởi người dùng. adb restorecho phép tạo dữ liệu ứng dụng từ một nguồn do người dùng chỉ định. Sau khi khôi phục, các ứng dụng không nên cho rằng dữ liệu, quyền tệp và quyền thư mục được tạo bởi chính ứng dụng.

Cài đặt allowBackup="false"opts một ứng dụng ra khỏi cả sao lưu và khôi phục.

Để khắc phục cảnh báo này, hãy quyết định xem ứng dụng của bạn có hỗ trợ sao lưu hay không và thiết lập rõ ràng android:allowBackup=(true|false)

Nhấn vào đây để biết thêm thông tin


35
Người dùng thường thậm chí không biết adb là gì và nếu có, họ có thể biết cách root thiết bị của mình và tự lấy dữ liệu, không?
nhà phát triển Android

1
@Tor Khi bạn nói "sao chép dữ liệu ứng dụng ra khỏi thiết bị", bạn có nghĩa là sao chép từ dữ liệu / dữ liệu / com.myapp hoặc từ sdcard? Thư mục cũ được bảo vệ và không thể đọc được trừ khi thiết bị được root.
IgorGanapolsky

2
Vậy để làm rõ bản sao lưu này mà Lint đang tham chiếu là công cụ ADB chứ không phải dịch vụ sao lưu đám mây, đúng không? Có vẻ rất nhiều câu trả lời khác đang bị nhầm lẫn.
Tony Chan

1
@IgorGanapolsky Tôi nghĩ rằng việc sử dụng ADB sẽ sao chép dữ liệu riêng tư và đó là lý do tại sao có cảnh báo. Tôi nghĩ rằng chỉ những người có tính năng gỡ lỗi được kích hoạt và kết nối thiết bị của họ với PC mới bị ảnh hưởng. những người như vậy thường là người dùng quyền lực hoặc nhà phát triển, vì vậy họ nên biết họ đang làm gì. rủi ro bảo mật dành cho những người đã làm sai và cài đặt một ứng dụng độc hại trên PC sử dụng công cụ ADB để thực hiện các hoạt động đó. có một ứng dụng để sao lưu và khôi phục mà không cần root, được gọi là "Helium": play.google.com/store/apps/iêu
nhà phát triển Android

"Nếu bạn đang sử dụng lint qua Eclipse .." có lẽ bạn nên chuyển sang AndroidStudio vì Plugin ADT không được dùng nữa.
throws_exceptions_at_you

26

Đây là những gì sao lưu theo nghĩa này thực sự có nghĩa là:

Dịch vụ sao lưu của Android cho phép bạn sao chép dữ liệu ứng dụng liên tục của mình vào bộ lưu trữ "đám mây" từ xa, để cung cấp điểm khôi phục cho dữ liệu và cài đặt của ứng dụng. Nếu người dùng thực hiện khôi phục cài đặt gốc hoặc chuyển đổi sang thiết bị chạy Android mới, hệ thống sẽ tự động khôi phục dữ liệu sao lưu của bạn khi ứng dụng được cài đặt lại. Bằng cách này, người dùng của bạn không cần phải sao chép cài đặt ứng dụng hoặc dữ liệu trước đó của họ.

~ Lấy từ http://developer.android.com/guide/topics/data/backup.html

Bạn có thể đăng ký dịch vụ sao lưu này với tư cách là nhà phát triển tại đây: https://developer.android.com/google/backup/signup.html

Loại dữ liệu có thể được sao lưu là tệp, cơ sở dữ liệu, sharedPreferences, bộ đệm và lib. Chúng thường được lưu trữ trong thư mục /data/data/[com.myapp] của thiết bị của bạn, được bảo vệ đọc và không thể truy cập trừ khi bạn có quyền root.

CẬP NHẬT : Bạn có thể thấy cờ này được liệt kê trên tài liệu api của BackupManuber : BackupManager


4
Tôi nghĩ rằng những thay đổi trong API cấp 23 chỉ ra đây là câu trả lời chính xác. Đây là tài liệu đào tạo cho các thay đổi: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65

8

Điều này không được đề cập rõ ràng, nhưng dựa trên các tài liệu sau đây, tôi nghĩ rằng nó được ngụ ý rằng một ứng dụng cần khai báo và triển khai BackupAgent để sao lưu dữ liệu hoạt động, ngay cả trong trường hợp khi allowBackup được đặt thành đúng (đó là giá trị mặc định).

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android. com / hướng dẫn / chủ đề / dữ liệu / backup.html


Điều gì xảy ra nếu ứng dụng không có bất cứ điều gì liên quan đến backupAgent? Android sẽ tự động sao lưu dữ liệu của mình?
nhà phát triển Android

1
câu trả lời đúng được tìm thấy ở đây: stackoverflow.com/a/13806946/878126 . có vẻ như nó không liên quan gì đến backupAgent. Tôi cũng đã cập nhật câu hỏi của mình để hiển thị tất cả những gì về nó.
nhà phát triển Android

3

Đó là mối quan tâm riêng tư . Bạn không nên cho phép người dùng sao lưu ứng dụng nếu nó chứa dữ liệu nhạy cảm. Có quyền truy cập vào các tệp sao lưu (tức là khi nào android:allowBackup="true"), có thể sửa đổi / đọc nội dung của ứng dụng ngay cả trên thiết bị chưa root.

Giải pháp - sử dụng android:allowBackup="false"trong tệp kê khai.

Bạn có thể đọc bài đăng này để có thêm thông tin: Hack ứng dụng Android bằng Kỹ thuật sao lưu


1
Bạn có nghiêm túc với câu trả lời này trong năm 2017 không? vui lòng đọc tại đây developer.android.com/guide/topics/data/ từ
batmaci

Bạn có thể tắt sao lưu bằng cách đặt android: allowBackup thành false. Bạn có thể muốn làm điều này nếu ứng dụng của bạn có thể tạo lại trạng thái của nó thông qua một số cơ chế khác hoặc nếu ứng dụng của bạn xử lý thông tin nhạy cảm mà Android không nên sao lưu.
Edgar Khimich

Hiện tại bạn có thể loại trừ dữ liệu nhạy cảm khỏi các bản sao lưu thông qua attribs trong tệp kê khai.
Yousha Aleayoub
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.