البرمجة النصية عبر التطبيقات

فئة OWASP: MASVS-CODE: جودة الرمز

نظرة عامة

WebView هو مكوّن متصفّح مضمّن في تطبيقات Android ويسهّل عرض محتوى الويب داخل التطبيق. ويعرض HTML وCSS و JavaScript داخل واجهة مستخدم التطبيق.

ترتبط هجمات Cross-App Scripting بشكل عام بتنفيذ رمز برمجي ضار في سياق تطبيق ضحية. لأغراض هذه الوثائق، سوف يقتصر الموضوع على إدخال برامج ضارة رمز JavaScript في مكوّن WebView المعرَّض للاختراق

عندما يقبل تطبيق محتوى JavaScript ضارًا في WebView غير كافٍ أو تعقيمها، فإن التطبيق يكون عرضة للاختراق عبر البرمجة النصية.

التأثير

يمكن استغلال الثغرات الأمنية البرمجية بين التطبيقات عندما يتحكم المهاجم بها يتم تمرير محتوى JavaScript إلى WebView الخاص بالتطبيق الذي يتضمّن ثغرة أمنية بدون والتحقق من صحتها أو تصحيحها. وبالتالي، فإن رمز JavaScript الذي توفّره وينفذ المهاجم في سياق WebView للتطبيق الضحية. يمكن بعد ذلك لرمز JavaScript الضار استخدام الأذونات نفسها التي يحصل عليها التطبيق المستهدف، مما قد يؤدي إلى سرقة بيانات المستخدم الحساسة واختراق الحساب.

إجراءات التخفيف

إيقاف JavaScript

إذا كان تطبيقك لا يتطلّب استخدام JavaScript، سيؤدّي إيقافه إلى ضمان عدم تحوله إلى تهديد:

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

إذا كان تطبيقك يتطلّب JavaScript، تأكَّد من أنّك تملك أي رمز JavaScript تم تمريره إلى WebView أو تتحكّم فيه. تجنُّب السماح لتطبيق WebView بتنفيذ عشوائي JavaScript، يمكنك الاطّلاع على الإرشادات في القسم التالي.

التأكّد من تحميل المحتوى المتوقّع فقط في WebView

عند استخدام طرق مثل shouldOverrideUrlLoading() أو loadUrl() أو evaluateJavascript(),، تأكَّد من أنّه تم التحقّق من أي عناوين URL تم تمريرها إليها. كما ذكرنا سابقًا، يجب أن ينبع أي رمز JavaScript يتم تمريره إلى WebView فقط من النطاقات المتوقّعة، لذا من المهم التحقّق من المحتوى الذي يتم تحميله.

يمكنك الاطّلاع على مستندات التحقّق من صحة مدخلات OWASP وجهاز Android هذا. التحقّق من الأمان لمكوّنات WebView للحصول على نصائح وأمثلة مفيدة.

ضبط إعدادات الوصول الآمن إلى الملفات في WebView

يمكن أن يؤدي التأكّد من عدم إمكانية الوصول إلى الملفات إلى منع تنفيذ JavaScript عشوائيًا داخل مكوّنات WebView. يجب مراعاة ما يلي WebSettings عند تأمين الوصول إلى الملفات:

  • أوقِف إمكانية الوصول إلى الملفات. يتم ضبط setAllowFileAccess تلقائيًا على True في المستوى 29 من واجهة برمجة التطبيقات والإصدارات الأقدم، ما سيسمح بالوصول إلى الملفات المحلية. في المستوى 30 من واجهة برمجة التطبيقات والإصدارات الأحدث، تكون القيمة التلقائية هي False. وللتأكّد من عدم السماح بالوصول إلى الملفات، ضبط setAllowFileAccess بشكل صريح على False
  • إيقاف الوصول إلى المحتوى: الإعداد التلقائي لرمز setAllowContentAccess هو True. يسمح الوصول إلى عنوان URL للمحتوى لتطبيق WebView بتحميل المحتوى من موفِّر محتوى مثبَّت في النظام. إذا كان تطبيقك لا يتطلّب الوصول إلى المحتوى، يُرجى اتّباع الخطوات التالية: اضبط السمة setAllowContentAccess على False لمنع إساءة الاستخدام المحتمَلة في حال هجوم البرمجة النصية بين التطبيقات.

  • kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

تفعيل التصفُّح الآمن

فعِّل ميزة "التصفّح الآمن" في AndroidManifest.xml لفحص عناوين URL التي يتم تمريرها إلى WebView بحثًا عن التصيّد الاحتيالي أو النطاقات الضارّة:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

المراجع