ক্রস-অ্যাপ স্ক্রিপ্টিং

OWASP বিভাগ: MASVS-CODE: কোডের কোয়ালিটি

এক নজরে

WebView হল Android অ্যাপ্লিকেশনে এম্বেড করা ব্রাউজার কম্পোনেন্ট যা অ্যাপের মধ্যে ওয়েব কন্টেন্ট দেখানোর সুবিধা প্রদান করে। এটি অ্যাপের ইউজার ইন্টারফেসের মধ্যে HTML, CSS ও জাভাস্ক্রিপ্ট রেন্ডার করে।

ক্রস-অ্যাপ স্ক্রিপ্টিং সাধারণত কোনও ভিক্টিম অ্যাপ্লিকেশনের প্রসঙ্গে ক্ষতিকর কোড এক্সিকিউট করার সাথে সম্পর্কিত। এই ডকুমেন্টেশনের উদ্দেশ্যে, বিষয়টি বিশেষভাবে দুর্বল WebView-তে ক্ষতিকর জাভাস্ক্রিপ্ট কোড ইঞ্জেকশনের মধ্যে সীমাবদ্ধ থাকবে।

কোনও অ্যাপ পর্যাপ্ত যাচাইকরণ বা স্যানিটাইজেশন ছাড়াই WebView-তে ক্ষতিকর জাভাস্ক্রিপ্ট গ্রহণ করলে, অ্যাপ্লিকেশনটি ক্রস-অ্যাপ স্ক্রিপ্টিংয়ের ঝুঁকির মুখে পড়ে।

প্রভাব

অ্যাটাকার-নিয়ন্ত্রিত জাভাস্ক্রিপ্ট কন্টেন্ট যাচাই বা স্যানিটাইজ না করে অসুরক্ষিত অ্যাপের ওয়েবভিউতে পাস করা হলে, ক্রস-অ্যাপ স্ক্রিপ্টিং সংক্রান্ত অসুরক্ষিততার সুযোগ নেওয়া যেতে পারে। এর ফলে, আক্রমণকারীর প্রদান করা জাভাস্ক্রিপ্ট কোড, আক্রান্ত অ্যাপ্লিকেশনের WebView-এর প্রসঙ্গে এক্সিকিউট করা হয়। ক্ষতিকর জাভাস্ক্রিপ্ট কোড তখন ভিকটিম অ্যাপের মতো একই অনুমতি ব্যবহার করতে পারে, যার ফলে ব্যবহারকারীর সংবেদনশীল ডেটা চুরি এবং অ্যাকাউন্ট হাইজ্যাক হতে পারে।

মিটিগেশন

জাভাস্ক্রিপ্ট বন্ধ করুন

আপনার অ্যাপ্লিকেশনে জাভাস্ক্রিপ্টের প্রয়োজন না হলে, এটি বন্ধ করে দিলে নিশ্চিত করা যাবে যে এটি কোনও বিপদ ডেকে আনবে না:

Kotlin

// 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-এর জন্য এই Android সুরক্ষা চেকলিস্ট দেখুন।

WebView-এর জন্য সুরক্ষিত ফাইল অ্যাক্সেস সেটিংস সেট করুন

ফাইল অ্যাক্সেস করা যাচ্ছে না তা নিশ্চিত করলে, ওয়েবভিউতে ইচ্ছামতো জাভাস্ক্রিপ্ট চালানো আটকানো যেতে পারে। ফাইল অ্যাক্সেস সুরক্ষিত করার সময় নিম্নলিখিত WebSettings বিবেচনা করা উচিত:

  • ফাইল অ্যাক্সেস বন্ধ করুন। ডিফল্ট হিসেবে, API লেভেল ২৯ ও তার নিচের ভার্সনে setAllowFileAccess-কে True-এ সেট করা হয়, যা লোকাল ফাইল অ্যাক্সেস করার অনুমতি দেবে। API লেভেল ৩০ এবং তার থেকে বেশি ভার্সনে ডিফল্ট হল 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 java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

নিরাপদ ব্রাউজিং সক্ষম করুন

ফিশিং বা ক্ষতিকর ডোমেনের জন্য WebView-তে পাস করা URL স্ক্যান করতে AndroidManifest.xml-এ Safe Browsing চালু করুন।:

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

রিসোর্স