فئة OWASP: MASVS-CODE: جودة الرمز
نظرة عامة
WebView هو مكوّن متصفّح مضمّن في تطبيقات Android يسهّل عرض محتوى الويب داخل التطبيق. ويعرض هذا المكوّن ملفات HTML وCSS وJavaScript ضمن واجهة مستخدم التطبيق.
يرتبط اختراق Cross-App Scripting بشكل عام بتنفيذ رمز ضار في سياق تطبيق مستهدف. لأغراض هذه المستندات، سيقتصر الموضوع تحديدًا على إدخال رمز JavaScript ضار في مكوّن WebView معرّض للخطر.
عندما يقبل تطبيق JavaScript ضارًا في مكوّن WebView بدون إجراء عملية تحقّق أو تنظيف كافية، يصبح التطبيق معرّضًا لهجمات اختراق Cross-App Scripting.
التأثير
يمكن استغلال الثغرات الأمنية الناتجة عن اختراق Cross-App Scripting عندما يتم تمرير محتوى 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لمنع أي إساءة محتملة في حال حدوث هجوم هجمات Cross-App Scripting.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
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" />
الموارد
- مستندات "التصفّح الآمن"
- مرجع مطوّري WebView
- مرجع مطوّري WebSettings لمكوّن WebView
- مستندات مطوّري setAllowFileAccess
- مرجع مطوّري setAllowContentAccess