دسته 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" />
منابع
- اسناد مرور ایمن
- مرجع توسعه دهنده WebView
- WebSettings برای مرجع توسعه دهنده WebView
- مستندات توسعه دهنده setAllowFileAccess
- مرجع توسعه دهنده setAllowContentAccess