البرمجة النصية عبر التطبيقات
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة 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" />
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ 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,["# Cross-app scripting\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nA WebView is an embedded browser component in Android applications that\nfacilitates the display of web content within an app. It renders HTML, CSS, and\nJavaScript within the app's user interface.\n\nCross-App Scripting is broadly associated with the execution of malicious code\nin the context of a victim application. For the purposes of this documentation,\nthe subject will be constrained specifically to the injection of malicious\nJavaScript code into a vulnerable WebView.\n\nWhen an app accepts malicious JavaScript into a WebView without sufficient\nvalidation or sanitization, the application is vulnerable to cross-app\nScripting.\n\nImpact\n------\n\nCross-app scripting vulnerabilities can be exploited when attacker-controlled\nJavaScript content is passed to the vulnerable app's WebView without being\nvalidated or sanitized. As a result, the JavaScript code provided by the\nattacker is executed in the context of the victim application's WebView. The\nmalicious JavaScript code can then use the same permissions as the victim app's,\nwhich may lead to theft of sensitive user data, and account hijacking.\n\nMitigations\n-----------\n\n### Disable JavaScript\n\nIf your application does not require JavaScript, disabling it will ensure it\ndoes not become a threat: \n\n### Kotlin\n\n // Get the WebView Object\n val webView = findViewById\u003cWebView\u003e(R.id.webView)\n val webSettings = webView.settings\n\n // Disable JavaScript\n webSettings.javaScriptEnabled = false\n\n### Java\n\n // Get the WebView Object\n WebView webView = (WebView) findViewById(R.id.webView);\n WebSettings webSettings = webView.getSettings();\n\n // Disable JavaScript for the WebView\n webSettings.setJavaScriptEnabled(false);\n\nIf your application does require JavaScript, ensure that you own or control any\nJavaScript passed to WebView. Avoid allowing WebView to execute arbitrary\nJavaScript, see the guidance in the next section.\n\n### Ensure only expected content is loaded into WebView\n\nWhen using methods like [`shouldOverrideUrlLoading()`](/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)), [`loadUrl()`](/reference/android/webkit/WebView#loadUrl(java.lang.String)), or\n[`evaluateJavascript()`](/reference/android/webkit/WebView#evaluateJavascript(java.lang.String,%20android.webkit.ValueCallback%3Cjava.lang.String%3E))`,` make sure that any URLs passed to them are\nchecked. As stated earlier, any JavaScript passed to the WebView should only\ncome from expected domains, so it is important to verify what is being loaded.\n\nCheck OWASP's input validation [documentation](https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html) and this Android\nsecurity [checklist](https://blog.oversecured.com/Android-security-checklist-webview/) for WebViews for good advice and examples.\n\n### Set secure file access settings for WebView\n\nEnsuring that files are not accessible can prevent arbitrary JavaScript from\nbeing executed within WebViews.The following [`WebSettings`](/reference/android/webkit/WebSettings) should be\nconsidered when securing file access:\n\n- Disable file access. By default, [`setAllowFileAccess`](/reference/android/webkit/WebSettings#setAllowFileAccess(boolean)) is set to `True` in API level 29 and lower which will permit access to local files. In API level 30 and higher the default is `False`. To ensure file access is not permitted, explicitly set `setAllowFileAccess` to `False`\n- Disable content access. The default setting of [`setAllowContentAccess`](/reference/android/webkit/WebSettings#setAllowContentAccess(boolean)) is\n `True`. Content URL access allows WebView to load content from a content\n provider installed in the system. If your app does not require content access,\n set `setAllowContentAccess` to `False` to prevent potential misuse in case of a\n cross-app scripting attack.\n\n- kotlin\n `kotlin\n webView.settings.javaScriptEnabled = false\n webView.settings.domStorageEnabled = true\n webView.settings.allowFileAccess = false\n webView.settings.allowContentAccess = false`\n\n- java\n `java\n webView.getSettings().setJavaScriptEnabled(false);\n webView.getSettings().setDomStorageEnabled(true);\n webView.getSettings().setAllowFileAccess(false);\n webView.getSettings().setAllowContentAccess(false);`\n\n### Enable Safe Browsing\n\nEnable Safe Browsing in [`AndroidManifest.xml`](/guide/topics/manifest/manifest-intro) to scan URLs passed to\nWebView for phishing or malicious domains.: \n\n \u003cmeta-data android:name=\"android.webkit.WebView.EnableSafeBrowsing\"\n android:value=\"true\" /\u003e\n\nResources\n---------\n\n- [Safe Browsing documentation](/privacy-and-security/safetynet/safebrowsing)\n- [WebView developer reference](/reference/android/webkit/WebView)\n- [WebSettings for WebView developer reference](/reference/android/webkit/WebSettings)\n- [setAllowFileAccess developer documentation](/reference/android/webkit/WebSettings#setAllowFileAccess(boolean))\n- [setAllowContentAccess developer reference](/reference/android/webkit/WebSettings#setAllowContentAccess(boolean))"]]