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

OWASP বিভাগ: MASVS-CODE: কোডের গুণমান

সংক্ষিপ্ত বিবরণ

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

ক্রস-অ্যাপ স্ক্রিপ্টিং বলতে সাধারণত কোনো ভুক্তভোগী অ্যাপ্লিকেশনের প্রেক্ষাপটে ক্ষতিকারক কোড কার্যকর করাকে বোঝায়। এই ডকুমেন্টেশনের উদ্দেশ্যে, বিষয়টি বিশেষভাবে একটি ঝুঁকিপূর্ণ 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-কে যথেচ্ছ জাভাস্ক্রিপ্ট চালানোর অনুমতি দেওয়া থেকে বিরত থাকুন, এ বিষয়ে পরবর্তী বিভাগের নির্দেশনা দেখুন।

ওয়েবভিউতে শুধুমাত্র প্রত্যাশিত কন্টেন্ট লোড করা নিশ্চিত করুন।

shouldOverrideUrlLoading() , loadUrl() , বা evaluateJavascript() এর মতো মেথড ব্যবহার করার সময় , নিশ্চিত করুন যে সেগুলিতে পাঠানো যেকোনো URL যাচাই করা হয়েছে। আগেই বলা হয়েছে, WebView-তে পাঠানো যেকোনো জাভাস্ক্রিপ্ট শুধুমাত্র প্রত্যাশিত ডোমেইন থেকেই আসা উচিত, তাই কী লোড করা হচ্ছে তা যাচাই করা গুরুত্বপূর্ণ।

ভালো পরামর্শ ও উদাহরণের জন্য OWASP-এর ইনপুট ভ্যালিডেশন ডকুমেন্টেশন এবং WebViews-এর জন্য এই অ্যান্ড্রয়েড নিরাপত্তা চেকলিস্টটি দেখুন।

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

ফাইলগুলি অ্যাক্সেসযোগ্য নয় তা নিশ্চিত করলে WebViews-এর মধ্যে যথেচ্ছ জাভাস্ক্রিপ্ট এক্সিকিউট হওয়া প্রতিরোধ করা যায়। ফাইল অ্যাক্সেস সুরক্ষিত করার জন্য নিম্নলিখিত WebSettings বিবেচনা করা উচিত:

  • ফাইল অ্যাক্সেস নিষ্ক্রিয় করুন। ডিফল্টরূপে, API লেভেল ২৯ এবং তার নিচের সংস্করণগুলোতে setAllowFileAccess মান True সেট করা থাকে, যা লোকাল ফাইল অ্যাক্সেসের অনুমতি দেয়। API লেভেল ৩০ এবং তার উপরের সংস্করণগুলোতে ডিফল্ট মান 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);

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

WebView-তে পাঠানো URL-গুলো ফিশিং বা ক্ষতিকর ডোমেইনের জন্য স্ক্যান করতে AndroidManifest.xml এ সেফ ব্রাউজিং সক্রিয় করুন।

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

সম্পদ