توصیه های امنیتی برای پشتیبان گیری
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
هدف پشتیبانگیری از برنامه حفظ اطلاعات کاربران است تا بعداً بتوان آن را به دستگاه جدید بازیابی کرد یا در صورت از دست رفتن دادهها. توصیههای امنیتی موجود در مورد پشتیبانگیری از برنامهها متفاوت است و بین نسخههای اندروید و سازندگان دستگاه متفاوت است. موضوع رایج این است که هدف این توصیهها حصول اطمینان از افشای دادههای حساس است.
سیستم استاندارد پشتیبانگیری اندروید امنترین، قویترین و سادهترین راهحل را برای برنامهها فراهم میکند تا از دادههای خود در فضای ابری پشتیبانگیری کنند یا از طریق پشتیبانگیری خودکار ، دادهها را به دستگاه جدید منتقل کنند (که بهطور پیشفرض فعال است، برای پیادهسازی نیازی به کار ندارد و میتواند همچنین تمدید شود) و پشتیبان گیری کلید-مقدار . ما استفاده از این راه حل را توصیه می کنیم زیرا داده های پشتیبان حاصل را در دایرکتوری هایی ذخیره می کند که توسط سایر برنامه های 3p قابل دسترسی نیستند، همچنین رمزگذاری در حالت استراحت، رمزگذاری در حین انتقال و پیکربندی هایی را که امکان حذف داده های حساس از پشتیبان ها را فراهم می کند، تسهیل می کند.
اگر در عوض یک برنامه یک راه حل پشتیبانگیری را اجرا کند که به سیستم استاندارد پشتیبانگیری اندروید متکی نیست، این میتواند احتمال اشتباهاتی که منجر به نشت اطلاعات حساس شود را افزایش دهد. نمونههایی از راهحلهای پشتیبانگیری غیر استاندارد که دادههای کاربر را در معرض نشت قرار میدهند، شامل برنامههایی هستند که قابلیت «صادرات» یا «پشتیبانگیری» را ارائه میکنند که یک کپی از دادههای برنامه را در فهرستهای راهنمای قابل خواندن توسط برنامههای دیگر ایجاد میکنند، و از این رو مستعد لو رفتن هستند (یا مستقیماً). یا از طریق آسیب پذیری های دیگر).
تاثیر
پیروی از توصیههای امنیتی هنگام راهاندازی پشتیبانگیری از برنامه، از نشت احتمالی دادههای حساسی که ممکن است پشتیبانگیری داشته باشد، جلوگیری میکند. بسته به داده های واقعی و نیات مهاجم، نشت داده های حساس ممکن است منجر به افشای اطلاعات، جعل هویت کاربر و ضرر مالی شود.
اقدامات کاهشی
از سیستم استاندارد پشتیبان گیری اندروید استفاده کنید
سیستم استاندارد پشتیبان گیری اندروید همیشه داده های پشتیبان را در حال انتقال و در حالت استراحت رمزگذاری می کند. این رمزگذاری صرف نظر از نسخه Android در حال استفاده و اینکه آیا دستگاه شما صفحه قفل دارد یا خیر اعمال می شود. با شروع از Android 9، اگر دستگاه دارای صفحه قفل تنظیم شده باشد، داده های پشتیبان نه تنها رمزگذاری می شوند، بلکه با کلیدی که گوگل آن را نمی شناسد رمزگذاری می شود (راز صفحه قفل از کلید رمزگذاری محافظت می کند، بنابراین رمزگذاری سرتاسر را امکان پذیر می کند. ).
به طور کلی به یاد داشته باشید که دستورالعمل های ذخیره سازی داده و امنیت را دنبال کنید.
اگر نسخه پشتیبان شما شامل دادههای بسیار حساسی است، توصیه میکنیم یا این دادهها را حذف کنید یا اگر نمیتوانید آنها را حذف کنید، به رمزگذاری انتها به انتها که در بخش زیر توضیح داده شده است، نیاز دارید.
حذف دادهها از پشتیبانگیری
میتوانید با استفاده از یک فایل قوانین، که معمولاً backup_rules.xml
نامیده میشود و در پوشه برنامه res/xml
قرار میگیرد، مشخص کنید که کدام دادهها از نسخه پشتیبان حذف شوند. بسته به نسخه اندرویدی که استفاده میشود، تفاوتهایی در نحوه پیکربندی قوانین پشتیبانگیری وجود دارد:
- برای نسخههای Android 12 (سطح API 31) و بالاتر ، یک ویژگی
android:dataExtractionRules
به عنصر <application>
در AndroidManifest.xml
اضافه کنید: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
سپس، فایل backup_rules.xml
با توجه به پایداری داده ها و الزامات امنیتی برنامه، پیکربندی کنید ، به دنبال فرمت پیکربندی به روز شده .
فرمت مورد نیاز برای پیکربندی فایل backup_rules.xml
به توسعه دهندگان این امکان را می دهد تا قوانین پشتیبان گیری سفارشی را برای انتقال Cloud و Device-to-Device (D2D) تعریف کنند. اگر ویژگی <device-transfer>
تنظیم نشده باشد، تمام داده های برنامه در طول انتقال D2D منتقل می شود. نکته مهم این است که حتی اگر برنامه هدف اندروید 12 یا بالاتر را هدف قرار دهد، همیشه باید یک فایل جداگانه با مجموعه ای از قوانین پشتیبان اضافی برای دستگاه های دارای Android 11 (سطح API 30) یا پایین تر مشخص شود.
- برای نسخههای Android 11 و پایینتر ، یک ویژگی
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
تغییر نام داده و از Android 12 روی true
تنظیم شود، به این هدف دست یابید.
اگر نمی توانید از سیستم استاندارد پشتیبان گیری اندروید استفاده کنید
اگر نمیتوانید از سیستم استاندارد پشتیبانگیری Android استفاده کنید، ذخیره ایمن دادههای پشتیبان خود و همچنین تعیین اینکه کدام دادهها را از نسخه پشتیبان خود حذف کنید، پیچیدهتر است. این باید در سطح کد مشخص شود و در نتیجه مستعد خطا است و خطر نشت داده ها را به همراه دارد. در این سناریو، همچنین توصیه میشود که به طور منظم پیادهسازی خود را آزمایش کنید تا مطمئن شوید که هیچ تغییری در رفتار پشتیبانگیری مورد انتظار ایجاد نشده است.
منابع
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)"]]