برنامه نویسی متقابل
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
WebView یک جزء مرورگر تعبیه شده در برنامه های اندروید است که نمایش محتوای وب را در یک برنامه تسهیل می کند. HTML، CSS و جاوا اسکریپت را در رابط کاربری برنامه ارائه می کند.
اسکریپت بین برنامه ای به طور گسترده با اجرای کدهای مخرب در زمینه یک برنامه قربانی مرتبط است. برای اهداف این مستندات، موضوع به طور خاص به تزریق کد جاوا اسکریپت مخرب به یک WebView آسیبپذیر محدود میشود.
هنگامی که یک برنامه جاوا اسکریپت مخرب را در یک WebView بدون تایید یا پاکسازی کافی می پذیرد، برنامه در برابر اسکریپت بین برنامه ای آسیب پذیر است.
تاثیر
هنگامی که محتوای جاوا اسکریپت کنترل شده توسط مهاجم بدون تایید یا پاکسازی به WebView برنامه آسیبپذیر ارسال میشود، آسیبپذیریهای برنامهنویسی متقابل میتوانند مورد سوء استفاده قرار گیرند. در نتیجه، کد جاوا اسکریپت ارائه شده توسط مهاجم در زمینه WebView برنامه قربانی اجرا می شود. سپس کد مخرب جاوا اسکریپت می تواند از همان مجوزهای برنامه قربانی استفاده کند که ممکن است منجر به سرقت اطلاعات حساس کاربر و سرقت حساب شود.
اقدامات کاهشی
جاوا اسکریپت را غیرفعال کنید
اگر برنامه شما به جاوا اسکریپت نیاز ندارد، غیرفعال کردن آن باعث می شود که به تهدید تبدیل نشود:
کاتلین
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
جاوا
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
اگر برنامه شما به جاوا اسکریپت نیاز دارد، مطمئن شوید که هر جاوا اسکریپت ارسال شده به WebView را دارید یا آن را کنترل می کنید. از اجازه دادن به WebView برای اجرای جاوا اسکریپت دلخواه خودداری کنید، راهنمایی را در بخش بعدی ببینید.
مطمئن شوید که فقط محتوای مورد انتظار در WebView بارگیری می شود
هنگام استفاده از روش هایی مانند shouldOverrideUrlLoading()
، loadUrl()
، یا evaluateJavascript()
,
مطمئن شوید که URL های ارسال شده به آنها بررسی شده است. همانطور که قبلاً گفته شد، هر جاوا اسکریپتی که به WebView ارسال می شود فقط باید از دامنه های مورد انتظار باشد، بنابراین تأیید اینکه چه چیزی بارگذاری می شود بسیار مهم است.
برای مشاوره و مثالهای خوب، اسناد تأیید اعتبار ورودی OWASP و این چک لیست امنیتی Android را برای WebViews بررسی کنید.
تنظیمات دسترسی به فایل ایمن را برای WebView تنظیم کنید
اطمینان از اینکه فایلها در دسترس نیستند، میتواند از اجرای جاوا اسکریپت دلخواه در WebViews جلوگیری کند. هنگام ایمن کردن دسترسی به فایل WebSettings
زیر باید در نظر گرفته شود:
- غیرفعال کردن دسترسی به فایل به طور پیش فرض،
setAllowFileAccess
در سطح API 29 و پایین تر روی True
تنظیم شده است که امکان دسترسی به فایل های محلی را فراهم می کند. در سطح API 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 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" />
منابع
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و 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,["# 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))"]]