OWASP বিভাগ: MASVS-CODE: কোড গুণমান
ওভারভিউ
একটি ওয়েবভিউ হল অ্যান্ড্রয়েড অ্যাপ্লিকেশনে একটি এমবেড করা ব্রাউজার উপাদান যা একটি অ্যাপের মধ্যে ওয়েব সামগ্রী প্রদর্শনের সুবিধা দেয়৷ এটি অ্যাপের ইউজার ইন্টারফেসের মধ্যে HTML, CSS এবং JavaScript রেন্ডার করে।
ক্রস-অ্যাপ স্ক্রিপ্টিং একটি ভিকটিম অ্যাপ্লিকেশনের প্রেক্ষাপটে দূষিত কোড কার্যকর করার সাথে ব্যাপকভাবে জড়িত। এই ডকুমেন্টেশনের উদ্দেশ্যে, বিষয়টি বিশেষভাবে ক্ষতিকারক জাভাস্ক্রিপ্ট কোড একটি দুর্বল ওয়েবভিউতে ইনজেকশনের জন্য সীমাবদ্ধ থাকবে।
যখন কোনো অ্যাপ পর্যাপ্ত বৈধতা বা স্যানিটাইজেশন ছাড়াই ওয়েবভিউতে ক্ষতিকারক জাভাস্ক্রিপ্ট গ্রহণ করে, তখন অ্যাপ্লিকেশনটি ক্রস-অ্যাপ স্ক্রিপ্টিংয়ের জন্য ঝুঁকিপূর্ণ।
প্রভাব
ক্রস-অ্যাপ স্ক্রিপ্টিং দুর্বলতাগুলিকে কাজে লাগানো যেতে পারে যখন আক্রমণকারী-নিয়ন্ত্রিত জাভাস্ক্রিপ্ট সামগ্রী যাচাই বা স্যানিটাইজ না করেই দুর্বল অ্যাপের ওয়েবভিউতে পাস করা হয়। ফলস্বরূপ, আক্রমণকারীর দ্বারা প্রদত্ত জাভাস্ক্রিপ্ট কোড ভিকটিম অ্যাপ্লিকেশনের ওয়েবভিউ-এর পরিপ্রেক্ষিতে কার্যকর করা হয়। ক্ষতিকারক জাভাস্ক্রিপ্ট কোডটি তখন ভিকটিম অ্যাপের মতো একই অনুমতি ব্যবহার করতে পারে, যা ব্যবহারকারীর সংবেদনশীল ডেটা চুরি এবং অ্যাকাউন্ট হাইজ্যাক করতে পারে।
প্রশমন
জাভাস্ক্রিপ্ট অক্ষম করুন
আপনার অ্যাপ্লিকেশানের যদি জাভাস্ক্রিপ্টের প্রয়োজন না হয়, তাহলে এটি নিষ্ক্রিয় করা নিশ্চিত করবে যে এটি হুমকি হয়ে উঠবে না:
কোটলিন
// 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 চেক করা হয়েছে। আগেই বলা হয়েছে, ওয়েবভিউতে পাস করা যেকোন জাভাস্ক্রিপ্ট শুধুমাত্র প্রত্যাশিত ডোমেন থেকে আসা উচিত, তাই কী লোড হচ্ছে তা যাচাই করা গুরুত্বপূর্ণ।
ভাল পরামর্শ এবং উদাহরণের জন্য OWASP-এর ইনপুট যাচাইকরণ ডকুমেন্টেশন এবং WebViews-এর জন্য এই Android নিরাপত্তা চেকলিস্ট দেখুন।
WebView এর জন্য নিরাপদ ফাইল অ্যাক্সেস সেটিংস সেট করুন
ফাইলগুলি অ্যাক্সেসযোগ্য নয় তা নিশ্চিত করা WebViews-এর মধ্যে নির্বিচারে জাভাস্ক্রিপ্ট চালানো থেকে আটকাতে পারে৷ ফাইল অ্যাক্সেস সুরক্ষিত করার সময় নিম্নলিখিত WebSettings
বিবেচনা করা উচিত:
- ফাইল অ্যাক্সেস অক্ষম করুন। ডিফল্টরূপে, API লেভেল 29 এবং নিম্নে
setAllowFileAccess
True
সেট করা আছে যা স্থানীয় ফাইলগুলিতে অ্যাক্সেসের অনুমতি দেবে। API স্তর 30 এবং উচ্চতর ডিফল্ট হলFalse
। ফাইল অ্যাক্সেসের অনুমতি নেই তা নিশ্চিত করার জন্য, স্পষ্টভাবে সেট করুনFalse
এ সেটsetAllowFileAccess
কন্টেন্ট অ্যাক্সেস অক্ষম করুন।
setAllowContentAccess
এর ডিফল্ট সেটিং হলTrue
। কন্টেন্ট ইউআরএল অ্যাক্সেস ওয়েবভিউকে সিস্টেমে ইনস্টল করা কন্টেন্ট প্রদানকারীর থেকে কন্টেন্ট লোড করতে দেয়। যদি আপনার অ্যাপের কন্টেন্ট অ্যাক্সেসের প্রয়োজন না হয়, তাহলে একটি ক্রস-অ্যাপ স্ক্রিপ্টিং আক্রমণের ক্ষেত্রে সম্ভাব্য অপব্যবহার রোধ করতেFalse
এsetAllowContentAccess
সেট করুন।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" />
সম্পদ
- নিরাপদ ব্রাউজিং ডকুমেন্টেশন
- WebView ডেভেলপার রেফারেন্স
- WebView ডেভেলপার রেফারেন্সের জন্য ওয়েব সেটিংস
- setAllowFileAccess ডেভেলপার ডকুমেন্টেশন
- setAllowContentAccess ডেভেলপার রেফারেন্স