رده 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 و این چکلیست امنیتی اندروید برای WebViews را بررسی کنید.
تنظیمات دسترسی امن به فایل را برای WebView تنظیم کنید
اطمینان از عدم دسترسی به فایلها میتواند از اجرای جاوا اسکریپت دلخواه در WebViewها جلوگیری کند. WebSettings زیر باید هنگام ایمنسازی دسترسی به فایل در نظر گرفته شوند:
- دسترسی به فایل را غیرفعال کنید. به طور پیشفرض،
setAllowFileAccessدر سطح API 29 و پایینتر رویTrueتنظیم شده است که دسترسی به فایلهای محلی را مجاز میکند. در سطح API 30 و بالاتر، پیشفرضFalseاست. برای اطمینان از اینکه دسترسی به فایل مجاز نیست، صریحاًsetAllowFileAccessرویFalseتنظیم کنید. دسترسی به محتوا را غیرفعال کنید. تنظیم پیشفرض
setAllowContentAccessTrueاست. دسترسی به 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
- تنظیمات وب برای مرجع توسعهدهندگان WebView
- مستندات توسعهدهندهی setAllowFileAccess
- مرجع توسعهدهندهی setAllowContentAccess