دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
«وبنما» یک مؤلفه مرورگر جاسازیشده در برنامههای Android است که نمایش محتوای وب را در برنامه تسهیل میکند. این مؤلفه HTML، CSS، و جاوا اسکریپت را در میانای کاربر برنامه ارائه میکند.
«تزریق اسکریپت در برنامه» بهطور گسترده با اجرای کد مخرب در بافت برنامه قربانی مرتبط است. برای اهداف این مستندسازی، موضوع بهطور خاص به تزریق کد مخرب «جاوا اسکریپت» در «وبنمای» آسیبپذیر محدود خواهد شد.
وقتی برنامهای جاوا اسکریپت مخرب را بدون اعتبارسنجی یا پاکسازی کافی در «وبنما» میپذیرد، برنامه دربرابر حمله «تزریق اسکریپت در برنامه» آسیبپذیر میشود.
تأثیر
آسیبپذیریهای تزریق اسکریپت در برنامه زمانی میتوانند مورد سوءاستفاده قرار گیرند که محتوای جاوا اسکریپت تحت کنترل مهاجم بدون اعتبارسنجی یا پاکسازی به وبنمای برنامه آسیبپذیر منتقل شود. درنتیجه، کد جاوا اسکریپت ارائهشده توسط مهاجم در بافت «وبنمای» برنامه قربانی اجرا میشود. سپس کد مخرب جاوا اسکریپت میتواند از همان اجازههای برنامه قربانی استفاده کند که ممکن است منجر به سرقت دادههای حساس کاربر و حسابربایی شود.
کاهش
غیرفعال کردن جاوا اسکریپت
اگر برنامه شما به جاوا اسکریپت نیاز ندارد، غیرفعال کردن آن تضمین میکند که به تهدید تبدیل نشود:
کاتلین
// 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 برای اجرای جاوا اسکریپت دلخواه خودداری کنید، راهنماییهای بخش بعدی را ببینید.
مطمئن شوید فقط محتوای موردانتظار در «وبنما» بار شود
هنگام استفاده از روشهایی مانند shouldOverrideUrlLoading()، loadUrl()، یا
evaluateJavascript(), مطمئن شوید که هر نشانی وبی که به آنها ارسال میشود
بررسی شده باشد. همانطور که قبلاً گفته شد، هر جاوا اسکریپتی که به WebView منتقل میشود باید فقط
از دامنههای موردانتظار باشد، بنابراین مهم است که آنچه بارگیری میشود تأیید شود.
برای دریافت توصیهها و نمونههای خوب، سند اعتبارسنجی ورودی OWASP و این بازبینه امنیتی Android برای «وبنماها» را بررسی کنید.
تنظیم کردن تنظیمات دسترسی به فایل ایمن برای WebView
اطمینان از اینکه فایلها قابلدسترسی نیستند میتواند از اجرای جاوااسکریپت دلخواه در «وبنماها» جلوگیری کند.هنگام ایمنسازی دسترسی به فایل، باید WebSettings زیر درنظر گرفته شود:
- دسترسی به فایل را غیرفعال کنید. بهطور پیشفرض،
setAllowFileAccessدر سطح API ۲۹ و پایینتر رویTrueتنظیم شده است که اجازه دسترسی به فایلهای محلی را میدهد. در سطح میانای برنامهسازی کاربردی ۳۰ و بالاتر، پیشفرضFalseاست. برای اطمینان از اینکه دسترسی به فایل مجاز نیست،setAllowFileAccessرا صریحاً رویFalseتنظیم کنید دسترسی به محتوا را غیرفعال کنید. تنظیم پیشفرض
setAllowContentAccessTrueاست. دسترسی به نشانی وب محتوا به WebView اجازه میدهد محتوا را از ارائهدهنده محتوای نصبشده در سیستم بار کند. اگر برنامهتان به دسترسی به محتوا نیاز ندارد،setAllowContentAccessرا رویFalseتنظیم کنید تا از سوءاستفاده احتمالی درصورت حمله تزریق اسکریپت در برنامه جلوگیری شود.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 فعال کنید تا نشانیهای وب ارسالشده به WebView را ازنظر دامنههای مخرب یا رمزگیری اسکن کند.:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
منابع
- اسناد «مرور ایمن»
- مرجع توسعهدهنده وبنما
- WebSettings برای مرجع توسعهدهنده WebView
- مستندات توسعهدهنده setAllowFileAccess
- مرجع توسعهدهنده setAllowContentAccess