اقتراحات الأمان للنُسخ الاحتياطية
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة OWASP: MASVS-CODE: جودة الرموز البرمجية
نظرة عامة
تهدف النُسخ الاحتياطية للتطبيق إلى الحفاظ على بيانات المستخدمين حتى يمكن استعادتها لاحقًا على جهاز جديد أو في حال فقدان البيانات. إنّ اقتراحات الأمان الحالية بشأن النُسخ الاحتياطية للتطبيقات دقيقة، وتختلف بين إصدارات Android والشركات المصنّعة للأجهزة. والموضوع الشائع هو أنّ هذه الاقتراحات تهدف إلى ضمان عدم تسرُّب أي بيانات حسّاسة.
يقدّم نظام الاحتفاظ بنسخة احتياطية العادي في Android أفضل حلّ
وأمن وفعال للتطبيقات من أجل الاحتفاظ بنسخة احتياطية من بياناتها على السحابة الإلكترونية أو لنقل البيانات إلى
جهاز جديد من خلال ميزة الاحتفاظ التلقائي بنسخة احتياطية (التي تكون مفعّلة تلقائيًا ولا تتطلّب
أي جهد لتنفيذها ويمكن أيضًا تمديدها) وميزة الاحتفاظ بنسخة احتياطية من المفاتيح والقيم. ننصح
باستخدام هذا الحلّ لأنّه يخزّن البيانات الاحتياطية الناتجة في
أدلة لا يمكن للتطبيقات الأخرى التابعة لجهات خارجية الوصول إليها، بالإضافة إلى تسهيل
التشفير في وضع عدم الاتّصال بالإنترنت والتشفير أثناء النقل والإعدادات التي تسمح
باستبعاد البيانات الحسّاسة من النُسخ الاحتياطية.
وإذا كان التطبيق يستخدم بدلاً من ذلك حلًا للاحتفاظ بنسخة احتياطية لا يعتمد على
نظام "الاحتفاظ بنسخة احتياطية" العادي في Android، قد يؤدي ذلك إلى زيادة احتمالية حدوث أخطاء منجرّة إلى تسرُّب البيانات الحسّاسة. ومن الأمثلة على حلول النسخ الاحتياطي غير العادية
التي تعرِّض بيانات المستخدمين لتسرُّبها التطبيقات التي توفّر إمكانية "التصدير" أو "النسخ الاحتياطي"
التي تنشئ نسخة من بيانات التطبيق في أدلة يمكن للتطبيقات الأخرى
قراءتها، وبالتالي تكون عرضة للتسرُّب (إما بشكل مباشر أو من خلال ثغرات أمنية أخرى).
التأثير
عند اتّباع اقتراحات الأمان عند إعداد نُسخ احتياطية من التطبيقات، يمكنك منع احتمال تسرُّب البيانات الحسّاسة التي قد تتضمّنها النُسخ الاحتياطية. استنادًا إلى
البيانات الفعلية وإلى نوايا المهاجم، قد يؤدي تسرُّب البيانات الحسّاسة إلى
إفصاح عن المعلومات وانتحال هوية المستخدمين وخسارة مالية.
إجراءات التخفيف
استخدام نظام "الاحتفاظ بنسخة احتياطية" العادي في Android
يشفِّر نظام الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android الأساسي دائمًا بيانات النُسخ الاحتياطية أثناء نقلها وفي حالات عدم النشاط. يتم تطبيق هذا التشفير بغض النظر عن إصدار Android المستخدَم وما إذا كان جهازك مزوّدًا بقفل شاشة. بدءًا من الإصدار 9 من نظام التشغيل Android، إذا كان الجهاز
مزوّدًا بقفل شاشة، لن يتم تشفير البيانات الاحتياطية فقط، بل سيتم تشفير
باستخدام مفتاح لا تعرفه Google (يحمي مفتاح قفل الشاشة مفتاح التشفير، ما يتيح التشفير التام بين الأطراف).
بشكل عام، يجب اتّباع إرشادات أمان تخزين البيانات.
إذا كانت النسخة الاحتياطية تتضمّن بيانات حسّاسة بشكل خاص، ننصحك إما بمحاولة
استبعاد هذه البيانات أو، إذا لم تتمكّن من استبعادها، بطلب التشفير من جهة إلى أخرى كما هو описан في القسم التالي.
استبعاد البيانات من النسخة الاحتياطية
يمكنك تحديد البيانات التي تريد استبعادها من النسخة الاحتياطية باستخدام ملف قواعد، ويُشار إليه عادةً باسم backup_rules.xml
ويتم وضعه في مجلد التطبيق res/xml
.
هناك بعض الاختلافات في كيفية ضبط قواعد الاحتفاظ بنسخة احتياطية استنادًا إلى
إصدار Android المستخدَم:
بعد ذلك، اضبط ملف backup_rules.xml
وفقًا
لمتطلبات أمان البيانات واستمراريتها في التطبيق، مع اتّباع
تنسيق الضبط المعدَّل.
يتيح التنسيق المطلوب لإعداد ملف backup_rules.xml
للمطوّرين تحديد قواعد احتياطية مخصّصة لكل من عمليات النقل في السحابة الإلكترونية وعمليات النقل من جهاز إلى جهاز
(D2D). في حال عدم ضبط سمة <device-transfer>
، سيتم نقل جميع
بيانات التطبيق أثناء عملية نقل البيانات من جهاز إلى آخر. من المهم
توضيح أنّه حتى إذا كان التطبيق المستهدَف يستهدف الإصدار 12 من نظام التشغيل Android أو إصدارًا أحدث، يجب تحديدملفٍ
منفصل يحتوي على مجموعة إضافية من قواعد الاحتفاظ بنسخة احتياطية
للأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أقدم.
- في الإصدار 11 من Android والإصدارات الأقدم، أضِف سمة
android:fullBackupContent
إلى العنصر <application>
ضمن AndroidManifest.xml
:
- xml
xml
<application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full">
…
</application>
بعد ذلك، عليك ضبط ملف backup_rules.xml
وفقًا لمتطلبات ثبات البيانات
والأمان في التطبيق باستخدام البنية الموضّحة في مقالة
الاحتفاظ بنسخة احتياطية من بيانات المستخدمين.
طلب التشفير التام بين الأطراف
إذا لم تتمكّن من استبعاد البيانات الحسّاسة من النسخة الاحتياطية، ننصحك
بطلب التشفير التام بين الأطراف، ما يعني السماح بإنشاء النُسخ الاحتياطية على نظام التشغيل Android 9
أو إصدار أحدث فقط وعند ضبط شاشة القفل فقط. يمكنك إجراء ذلك باستخدام
العلامة requireFlags="clientSideEncryption"
التي يجب إعادة تسميتها إلى
disableIfNoEncryptionCapabilities
وضبطها على true
اعتبارًا من الإصدار Android
12.
في حال تعذّر استخدام نظام "الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android" العادي
إذا لم تتمكّن من استخدام نظام "الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android" العادي، سيكون تخزين
بياناتك الاحتياطية بأمان وتحديد البيانات التي تريد استبعادها من النسخة الاحتياطية
أكثر تعقيدًا. يجب تحديد ذلك على مستوى الرمز البرمجي، وبالتالي هو
عرضة للخطأ، ما يعرّض البيانات للتسرّب. في هذا السيناريو، ننصحك أيضًا باختبار عملية التنفيذ بانتظام للتأكّد من عدم حدوث أي تغيير في سلوك الاحتفاظ بنسخة احتياطية المتوقّع.
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Security recommendations for backups\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nApp backups aim to preserve users' data so that it can later be restored to a\nnew device or in case of data loss. Existing security recommendations regarding\napp backups are nuanced, varying between Android versions and device\nmanufacturers. The common theme is that these recommendations aim at ensuring\nthat no sensitive data is leaked.\n\nThe Standard Android Backup system provides the most secure, robust, and easiest\nsolution for apps to back up their data to the cloud or to transfer data to a\nnew device through [Auto Backup](/identity/data/autobackup)(which is [enabled by default](/identity/data/backup), requires\nno work to implement and can also be extended) and [key-value backup](/guide/topics/data/keyvaluebackup). We\nrecommend using this solution because it stores the resulting backup data in\ndirectories that cannot be accessed by other 3p apps, as well as facilitating\nencryption at rest, encryption in transit, and configurations allowing for the\nexclusion of sensitive data from backups.\n\nIf instead an app implements a backup solution that is not reliant on the\nStandard Android Backup system, this could increase the likelihood of mistakes\nleading to leaks of sensitive data. Examples of non-standard backup solutions\nexposing user data to leaks include apps offering an \"export\" or \"backup\"\ncapability that creates a copy of the app data in directories readable by other\napps, and which is hence prone to being leaked (either directly or through other\nvulnerabilities).\n\nImpact\n------\n\nFollowing security recommendations when setting up app backups prevents the\npotential leak of sensitive data that backups might include. Depending on the\nactual data and on the attacker's intentions, sensitive data leak may lead to\ninformation disclosure, user impersonation, and financial loss.\n\nMitigations\n-----------\n\n### Use the Standard Android Backup system\n\nThe Standard Android Backup system always encrypts backup data in transit and at\nrest. This encryption is applied regardless of the Android version in use and of\nwhether your device has a lock screen. Starting from Android 9, if the device\nhas a lock screen set, then the backup data is not only encrypted, but encrypted\nwith a key not known to Google (the lock screen secret protects the encryption\nkey, thus enabling end-to-end encryption).\n\nIn general remember to follow the [data storage](/training/data-storage) and [security\nguidelines](/privacy-and-security/risks/sensitive-data-external-storage).\n\nIf your backup includes particularly sensitive data, then we recommend to either\nexclude this data or, if you cannot exclude it, require end-to-end encryption as\ndescribed in the following section.\n\n#### Excluding data from backup\n\nYou can specify which data to exclude from a backup using a rules file,\nconventionally called `backup_rules.xml`and placed in the `res/xml` app folder.\nThere are some differences in how backup rules are configured depending on the\nversion of Android that's used:\n\n- [For Android versions 12 (API level 31) and higher](/guide/topics/data/autobackup#include-exclude-android-12), add an `android:dataExtractionRules` attribute to the `\u003capplication\u003e` element within the `AndroidManifest.xml`:\n- xml `xml\n \u003capplication android:name=\"com.example.foo\" android:dataExtractionRules=\"@xml/backup_rules_extraction\"\u003e\n ...\n \u003c/application\u003e`\n\nThen, [configure](/guide/topics/data/autobackup#include-exclude-android-12) the `backup_rules.xml` file according to the\ndata persistence and security requirements of the application, following the\n[updated configuration format](/guide/topics/data/autobackup#xml-syntax-android-12).\n\nThe format required for the `backup_rules.xml` file configuration allows\ndevelopers to define custom backup rules for both Cloud and [Device-To-Device\n(D2D) transfers](/about/versions/12/behavior-changes-12#xml-changes). If the `\u003cdevice-transfer\u003e`attribute is not set, all the\napplication data will be transferred during a D2D migration. It is important to\nhighlight that even if the target application targets Android 12 or higher, a\nseparate file with [an additional set of backup rules](/identity/data/autobackup#include-exclude-android-11) should always be\nspecified for devices running Android 11 (API level 30) or lower.\n\n- [For Android versions 11 and lower](/guide/topics/data/autobackup#include-exclude-android-11), add an `android:fullBackupContent` attribute to the `\u003capplication\u003e` element within the `AndroidManifest.xml`:\n- xml `xml\n \u003capplication android:name=\"com.example.foo\" android:fullBackupContent=\"@xml/backup_rules_full\"\u003e\n ...\n \u003c/application\u003e`\n\nThen, configure the `backup_rules.xml` file according to the data persistence\nand security requirements of the application using the syntax reported in the\n[back up user data](/guide/topics/data/autobackup#include-exclude-android-11) article.\n\n#### Requiring end-to-end encryption\n\nIf you can't exclude sensitive data from your backup, then we recommend\nrequiring end-to-end encryption which means allowing backups only on Android 9\nor higher and only when the lock screen is set. You can achieve this by using\nthe `requireFlags=\"clientSideEncryption\"`flag, which needs to be renamed to\n`disableIfNoEncryptionCapabilities` and set to `true` starting from [Android\n12](/identity/data/autobackup#include-exclude-android-12).\n\n### If you can't use the Standard Android Backup system\n\nIf you can't use the Standard Android Backup system, then securely storing your\nbackup data as well as specifying which data to exclude from your backup is more\ncomplex. This needs to be specified at code level and is consequently\nerror-prone, risking data leaks. In this scenario, it is also recommended to\nregularly test your implementation to ensure that there has been no alteration\nto the expected backup behavior.\n\nResources\n---------\n\n- [Description of the allowBackup attribute](/guide/topics/manifest/application-element#allowbackup)\n- [File-Based Encryption](https://source.android.com/docs/security/features/encryption/file-based)\n- [D2D transfer behavior changes](/about/versions/12/behavior-changes-12#functionality-changes)\n- [Back up user data with Auto Backup](/identity/data/autobackup)\n- [Back up key-value pairs with Android Backup Service](/identity/data/keyvaluebackup)\n- [Control backup on Android 12 or higher](/guide/topics/data/autobackup#include-exclude-android-12)\n- [Control backup on Android 11 and lower](/guide/topics/data/autobackup#include-exclude-android-11)\n- [Understanding PII in Google's contracts and policies](https://support.google.com/analytics/answer/7686480)\n- [Test backup and restore](/identity/data/testingbackup)\n- [Cryptography](/guide/topics/security/cryptography)\n- [Android Keystore system](/training/articles/keystore)\n- [ADB](/tools/adb)\n- [Developer options](/studio/debug/dev-options)"]]