“ android: allowBackup” คืออะไร?


267

ตั้งแต่เวอร์ชันตัวอย่าง ADT ใหม่ (เวอร์ชัน 21)พวกเขามีคำเตือนขุยใหม่ที่บอกสิ่งต่อไปในไฟล์รายการ (ในแท็กแอปพลิเคชัน):

ควรตั้งค่า android อย่างชัดเจน: อนุญาตการสำรองข้อมูลเป็นจริงหรือเท็จ (เป็นจริงโดยค่าเริ่มต้นและอาจมีผลกระทบด้านความปลอดภัยสำหรับข้อมูลของแอปพลิเคชัน)

ในเว็บไซต์ทางการพวกเขาเขียน:

การตรวจสอบใหม่สองสามครั้ง: คุณต้องตัดสินใจอย่างชัดเจนว่าแอปของคุณอนุญาตการสำรองข้อมูลหรือไม่และการตรวจสอบป้ายกำกับ มีการตั้งค่าสถานะบรรทัดคำสั่งใหม่สำหรับการตั้งค่าเส้นทางไลบรารี การปรับปรุงหลายอย่างเพื่อการวิเคราะห์ผ้าสำลีที่เพิ่มขึ้นในขณะที่แก้ไข

คำเตือนนี้คืออะไร? คุณสมบัติการสำรองข้อมูลคืออะไรและฉันจะใช้ได้อย่างไร

ทำไมคำเตือนถึงบอกฉันว่ามันมีผลกระทบด้านความปลอดภัย? อะไรคือข้อเสียและข้อดีของการปิดใช้งานคุณสมบัตินี้


มีแนวคิดการสำรองข้อมูลสองรายการสำหรับรายการ:

  • "android: allowBackup " อนุญาตให้ทำการสำรองและกู้คืนผ่าน adb ดังที่แสดงที่นี่ :

อนุญาตให้แอปพลิเคชันเข้าร่วมในการสำรองข้อมูลและเรียกคืนโครงสร้างพื้นฐานหรือไม่ หากคุณลักษณะนี้ถูกตั้งค่าเป็น "เท็จ" จะไม่มีการสำรองข้อมูลหรือคืนค่าแอปพลิเคชันแม้ว่าจะมีการสำรองข้อมูลแบบเต็มระบบซึ่งอาจทำให้ข้อมูลแอปพลิเคชันทั้งหมดถูกบันทึกผ่าน adb ค่าเริ่มต้นของคุณลักษณะนี้เป็นจริง

สิ่งนี้ถือเป็นปัญหาด้านความปลอดภัยเนื่องจากผู้คนสามารถสำรองข้อมูลแอปของคุณผ่านADBจากนั้นรับข้อมูลส่วนตัวของแอพลงในพีซี

อย่างไรก็ตามฉันคิดว่าไม่ใช่ปัญหาเนื่องจากผู้ใช้ส่วนใหญ่ไม่ทราบว่า adb คืออะไรและถ้าพวกเขาทำพวกเขาจะรู้วิธีรูทอุปกรณ์ ฟังก์ชั่น ADB จะทำงานเฉพาะเมื่ออุปกรณ์เปิดใช้งานคุณสมบัติการดีบักและสิ่งนี้ต้องการให้ผู้ใช้เปิดใช้งาน

ดังนั้นเฉพาะผู้ใช้ที่เชื่อมต่ออุปกรณ์กับพีซีและเปิดใช้งานคุณสมบัติการดีบักเท่านั้นที่จะได้รับผลกระทบ หากพวกเขามีแอปที่เป็นอันตรายในพีซีที่ใช้เครื่องมือ ADB นี่อาจเป็นปัญหาได้เนื่องจากแอปสามารถอ่านข้อมูลที่เก็บข้อมูลส่วนตัว

ฉันคิดว่า Google ควรเพิ่มคุณสมบัติที่ถูกปิดใช้งานตามค่าเริ่มต้นในหมวดหมู่นักพัฒนาซอฟต์แวร์เพื่ออนุญาตการสำรองและเรียกคืนแอปผ่าน ADB

  • "android: backupAgent " อนุญาตให้ใช้คุณลักษณะการสำรองข้อมูลและคืนค่าระบบคลาวด์ดังที่แสดงไว้ที่นี่และที่นี่ :

ชื่อของคลาสที่ใช้เอเจนต์การสำรองข้อมูลของแอ็พพลิเคชันซึ่งเป็นคลาสย่อยของ BackupAgent ค่าแอตทริบิวต์ควรเป็นชื่อคลาสที่ผ่านการรับรองโดยสมบูรณ์ (เช่น "com.example.project.MyBackupAgent") อย่างไรก็ตามเป็นชวเลขถ้าอักขระตัวแรกของชื่อคือจุด (ตัวอย่างเช่น ".MyBackupAgent") มันจะผนวกเข้ากับชื่อแพ็กเกจที่ระบุในองค์ประกอบ ไม่มีค่าเริ่มต้น ต้องระบุชื่อ

นี่ไม่ใช่ปัญหาด้านความปลอดภัย


ฉันคิดว่าคุณควรลบข้อมูลเพิ่มเติมนั้นในการแก้ไขของคุณเพราะนั่นหมายถึงบริการสำรองข้อมูลบนคลาวด์แทนเครื่องมือสำรองข้อมูลของ ADB ว่าปัญหานี้เป็นการอ้างอิงจริง (ตามคำตอบของ Tor Norbye)
Tony Chan

@ เทอร์โบใช่คุณถูกต้อง ฉันคิดว่ามันไม่ได้อัปเดตมากนักเมื่อฉันได้อ่าน แต่ตอนนี้มันชัดเจนแล้ว ฉันจะอัปเดตคำถาม ขอบคุณ ฉันสงสัยว่าคุณลักษณะการสำรองข้อมูล adb สามารถใช้กับอุปกรณ์ที่รูตได้หรือไม่แม้แต่กับแอพที่ตั้งค่าเป็นเท็จ
นักพัฒนา android

2
@IgorGanapolsky ดังนั้นฉันสับสนโดยสิ้นเชิงในตอนนี้ ทำไมพวกเขาถึงพูดถึงมันใน 2 คุณสมบัติที่แตกต่างกันโดยสิ้นเชิง? เป็นไปได้หรือไม่ที่การตั้งค่าสถานะเดียวกันนี้รับผิดชอบทั้งสองคุณสมบัติ หรืออาจจะเป็นความผิดพลาด? คุณคิดว่าฉันควรยกเลิกคำตอบที่เลือกไว้หรือไม่?
นักพัฒนา android

1
@androiddeveloper เหตุผลที่มีคุณสมบัติที่แน่นอนเหมือนกันอยู่ในคุณสมบัติทั้งสองอาจเป็นเพราะมันมีไว้สำหรับวัตถุประสงค์สุดท้ายเดียวกัน: การสำรองข้อมูล ไม่ว่าจะเป็นบนอุปกรณ์หรือในเมฆ ...
IgorGanapolsky

3
ในฐานะผู้ใช้ Android ฉันต้องการชั่งน้ำหนักทุกคนที่พบสิ่งนี้และบอกว่าฉันไม่สามารถยืนแอพได้และมีหลายอย่างที่ปิดการสำรองข้อมูล หากบุคคลนั้นมีการเข้าถึงโทรศัพท์ที่ถูกปลดล็อคพวกเขาควรจะสามารถคัดลอกข้อมูลได้ การวัด "ความปลอดภัย" ใด ๆ ณ จุดนั้นนั้นไม่มีความหมายเนื่องจากสามารถทำการรูทโทรศัพท์เพื่อรับข้อมูลได้ แต่ในฐานะผู้ใช้ความสามารถในการสำรองข้อมูลแอพของฉัน (โดยไม่ต้องรูทและสะดุดบิต Knox ของฉัน) มีค่าอย่างมาก มันน่าผิดหวังจริง ๆ ที่มีแอพจำนวนมากไม่อนุญาตและแน่นอนว่า Android ยังมีสวิตช์นี้อยู่เลย
Nathan Stretch

คำตอบ:


139

สำหรับคำเตือนผ้าสำลีนี้สำหรับคำเตือนผ้าสำลีอื่น ๆ โปรดทราบว่าคุณสามารถรับคำอธิบายแบบเต็มกว่าสิ่งที่อยู่ในข้อความแสดงข้อผิดพลาดบรรทัดเดียว คุณไม่ต้องค้นหาข้อมูลเพิ่มเติมจากเว็บ

หากคุณกำลังใช้ผ้าสำลีผ่าน Eclipse ให้เปิดมุมมองคำเตือนผ้าสำลีซึ่งคุณสามารถเลือกข้อผิดพลาดของผ้าสำลีและดูคำอธิบายที่ยาวขึ้นหรือเรียกใช้การแก้ไขด่วน (Ctrl-1) บนบรรทัดข้อผิดพลาดและหนึ่งในคำแนะนำคือ " อธิบายปัญหานี้ "ซึ่งจะปรากฏขึ้นเพื่ออธิบายคำอธิบายแบบเต็ม หากคุณไม่ได้ใช้ Eclipse คุณสามารถสร้างรายงาน HTML จากผ้าสำลี ( lint --html <filename>) ซึ่งมีคำอธิบายแบบเต็มรูปแบบถัดจากคำเตือนหรือคุณสามารถขอผ้าสำลีเพื่ออธิบายปัญหาเฉพาะได้ ตัวอย่างเช่นปัญหาที่เกี่ยวข้องกับallowBackupมี ID 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 backupadb restore

นี่อาจมีผลกระทบด้านความปลอดภัยสำหรับแอปพลิเคชัน adb backupอนุญาตให้ผู้ใช้ที่เปิดใช้งานการดีบัก USB เพื่อคัดลอกข้อมูลแอปพลิเคชันออกจากอุปกรณ์ เมื่อสำรองข้อมูลแล้วแอปพลิเคชันทั้งหมดสามารถอ่านได้โดยผู้ใช้ adb restoreอนุญาตให้สร้างข้อมูลแอปพลิเคชันจากแหล่งที่ระบุโดยผู้ใช้ หลังจากการคืนค่าแอปพลิเคชันไม่ควรถือว่าข้อมูลสิทธิ์การใช้งานไฟล์และการอนุญาตไดเรกทอรีถูกสร้างขึ้นโดยแอปพลิเคชันเอง

การตั้งค่าallowBackup="false"เลือกแอปพลิเคชันออกจากการสำรองและเรียกคืน

ในการแก้ไขคำเตือนนี้ตัดสินใจว่าแอปพลิเคชันของคุณควรสนับสนุนการสำรองข้อมูลและตั้งค่าไว้อย่างชัดเจนหรือไม่ android:allowBackup=(true|false)

คลิกที่นี่สำหรับข้อมูลเพิ่มเติม


35
ผู้ใช้มักไม่รู้ด้วยซ้ำว่า adb คืออะไรและถ้าเป็นเช่นนั้นพวกเขาอาจรู้วิธีการรูทอุปกรณ์และรับข้อมูลด้วยตัวเองใช่ไหม?
นักพัฒนา android

1
@Tor เมื่อคุณพูดว่า "คัดลอกข้อมูลแอปพลิเคชันออกจากอุปกรณ์" คุณหมายถึงการคัดลอกจาก data / data / com.myapp หรือจาก sdcard หรือไม่? ไดเรกทอรีเดิมได้รับการคุ้มครองและไม่สามารถอ่านได้เว้นแต่ว่าอุปกรณ์จะได้รับการรูท
IgorGanapolsky

2
ดังนั้นเพื่อความชัดเจนในการสำรองข้อมูลนี้ที่ Lint อ้างอิงคือเครื่องมือ ADB ไม่ใช่บริการสำรองข้อมูลบนคลาวด์ใช่ไหม ดูเหมือนว่าคำตอบอื่น ๆ จำนวนมากกำลังสับสนอยู่
Tony Chan

1
@IgorGanapolsky ฉันคิดว่าการใช้ ADB จะเป็นการคัดลอกข้อมูลส่วนตัวและนั่นเป็นสาเหตุที่มีคำเตือน ฉันคิดว่าเฉพาะคนที่เปิดใช้งานคุณสมบัติการดีบักและเชื่อมต่ออุปกรณ์เข้ากับพีซีเท่านั้น คนเหล่านี้มักจะเป็นผู้ใช้ระดับสูงหรือนักพัฒนาดังนั้นพวกเขาควรรู้ว่าพวกเขากำลังทำอะไร ความเสี่ยงด้านความปลอดภัยสำหรับผู้ที่ทำโดยไม่ได้ตั้งใจและติดตั้งแอพที่เป็นอันตรายในพีซีที่ใช้เครื่องมือ ADB เพื่อดำเนินการดังกล่าว มีแอพสำหรับการสำรองข้อมูล & กู้คืนโดยไม่มีรูทที่เรียกว่า "ฮีเลียม": play.google.com/store/apps/…
นักพัฒนา Android

"ถ้าคุณใช้ผ้าสำลีผ่าน 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/ [ชื่อของผู้ใช้] อุปกรณ์ของคุณซึ่งได้รับการป้องกันการอ่านและไม่สามารถเข้าถึงได้เว้นแต่คุณจะมีสิทธิ์ใช้งานรูท

อัปเดต : คุณสามารถดูการตั้งค่าสถานะนี้ในเอกสาร api ของBackupManager : BackupManager


4
ฉันคิดว่าการเปลี่ยนแปลงใน API ระดับ 23 ชี้ไปที่นี่เป็นคำตอบที่ถูกต้อง นี่คือเอกสารการฝึกอบรมสำหรับการเปลี่ยนแปลง: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65

8

นี่ไม่ได้กล่าวถึงอย่างชัดเจน แต่จากเอกสารต่อไปนี้ฉันคิดว่ามันเป็นนัยที่แอพจำเป็นต้องประกาศและใช้ BackupAgent เพื่อให้การสำรองข้อมูลสามารถทำงานได้แม้ในกรณีที่อนุญาตให้แบ็คอัปตั้งค่าเป็นจริง (ซึ่งเป็น ค่าเริ่มต้น)

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android co.th / คู่มือ / หัวข้อ / ข้อมูล / backup.html


ถ้าแอพไม่มีอะไรเกี่ยวข้องกับ backupAgent ล่ะ? Android จะสำรองข้อมูลโดยอัตโนมัติหรือไม่
นักพัฒนา android

1
คำตอบที่ถูกพบในที่นี่: stackoverflow.com/a/13806946/878126 ดูเหมือนว่าไม่มีส่วนเกี่ยวข้องกับ backupAgent ฉันได้อัปเดตคำถามของฉันเพื่อแสดงว่ามันเกี่ยวกับอะไร
นักพัฒนา android

3

มันเป็นเรื่องความเป็นส่วนตัว ขอแนะนำให้ผู้ใช้ไม่อนุญาตให้สำรองข้อมูลแอพหากมีข้อมูลที่ละเอียดอ่อน การเข้าถึงไฟล์สำรองข้อมูล (เช่นเมื่อandroid:allowBackup="true") มันเป็นไปได้ที่จะแก้ไข / อ่านเนื้อหาของแอพแม้ในอุปกรณ์ที่ไม่ได้รูท

โซลูชัน - ใช้android:allowBackup="false"ในไฟล์รายการ

คุณสามารถอ่านโพสต์นี้เพื่อรับข้อมูลเพิ่มเติม: แฮ็คแอพ Android โดยใช้เทคนิคการสำรองข้อมูล


1
คุณจริงจังกับคำตอบนี้ในปี 2560 หรือไม่ โปรดอ่านได้ที่นี่developer.android.com/guide/topics/data/…
batmaci

คุณสามารถปิดการสำรองข้อมูลโดยตั้งค่า android: allowBackup เป็น false คุณอาจต้องการทำเช่นนี้หากแอปของคุณสามารถสร้างสถานะใหม่ผ่านกลไกอื่น ๆ หรือหากแอปของคุณจัดการกับข้อมูลที่สำคัญที่ Android ไม่ควรสำรองข้อมูล
Edgar Khimich

ขณะนี้คุณสามารถยกเว้นข้อมูลที่สำคัญจากการสำรองข้อมูลผ่าน attribs อย่างชัดแจ้ง
Yousha Aleayoub
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.