تزریق اسکریپت در برنامه

دسته 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 تنظیم کنید
  • دسترسی به محتوا را غیرفعال کنید. تنظیم پیش‌فرض setAllowContentAccess True است. دسترسی به نشانی وب محتوا به 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 فعال کنید تا نشانی‌های وب ارسال‌شده به WebView را ازنظر دامنه‌های مخرب یا رمزگیری اسکن کند.:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

منابع