فئة OWASP: MASVS-STORAGE: التخزين
نظرة عامة
يمكن أن يؤدي إعداد FileProvider بشكل غير صحيح إلى عرض الملفات والأدلة عن غير قصد على مهاجم. استنادًا إلى الإعداد، يمكن للمهاجم قراءة هذه الملفات المعروضة أو الكتابة فيها، ما قد يؤدي بدوره إلى تسريب المعلومات الحساسة أو، في أسوأ الحالات، تنفيذ تعليمات برمجية عشوائية. على سبيل المثال، يمكن لتطبيق تم ضبطه على <root-path> أن يسمح للمهاجم بالوصول إلى المعلومات الحساسة المخزّنة في قواعد البيانات أو بالكتابة فوق المكتبات الأصلية للتطبيق، ما يؤدي إلى تنفيذ تعليمات برمجية عشوائية.
التأثير
يختلف التأثير استنادًا إلى الإعداد ومحتوى الملف، ولكن يؤدي بشكل عام إلى تسريب البيانات (عند القراءة) أو الكتابة فوق الملفات (عند الكتابة).
الإجراءات المخفّفة
عدم استخدام عنصر المسار <root-path> في الإعداد
<root-path> يتطابق مع الدليل الجذر للجهاز (/). ويسمح هذا الإعداد بالوصول العشوائي إلى الملفات والمجلدات، بما في ذلك مساحة وضع الحماية للتطبيق ودليل /sdcard، ما يوفّر للمهاجم سطحًا واسعًا جدًا للهجوم.
مشاركة نطاقات مسار ضيقة
في ملف إعداد المسار، تجنَّب مشاركة نطاق مسار واسع مثل . أو /. يمكن أن يؤدي ذلك إلى عرض الملفات الحساسة عن طريق الخطأ. لا تشارك سوى نطاق مسار محدود/أضيق وتأكَّد من أنّ الملفات التي تريد مشاركتها فقط تندرج ضمن هذا المسار. سيمنع ذلك عرض الملفات الحساسة عن طريق الخطأ.
قد يبدو ملف الإعداد النموذجي الذي يتضمّن إعدادات أكثر أمانًا على النحو التالي:
Xml
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
التحقّق من عناوين URI الخارجية والتحقق من صحتها
تحقَّق من عناوين URI الخارجية (باستخدام مخطط content) وتأكَّد من أنّها لا تشير إلى الملفات المحلية لتطبيقك. يمنع ذلك أي تسريب غير مقصود للمعلومات.
منح الحد الأدنى من أذونات الوصول
يمكن أن يتضمّن content URI أذونات الوصول للقراءة والكتابة. تأكَّد من منح الحد الأدنى من أذونات الوصول المطلوبة فقط.
على سبيل المثال، إذا كان إذن القراءة فقط مطلوبًا، فامنح بشكل صريح FLAG_GRANT_READ_URI_PERMISSION فقط.
تجنُّب استخدام <external-path> لتخزين المعلومات الحساسة أو مشاركتها
يجب عدم تخزين البيانات الحساسة، مثل معلومات تكشف الهوية الشخصية (PII)، خارج حاوية التطبيق أو وحدة تخزين بيانات الاعتماد في النظام. لذلك، تجنَّب استخدام عنصر <external-path>، إلا إذا تحقّقت بشكل صريح من أنّ المعلومات التي يتم تخزينها أو مشاركتها ليست حساسة.