برنامه نویسی متقابل

دسته 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" />

منابع