> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/security/xss.md).

# XSS

### **XSS কি?**

Cross-Site Scripting (XSS) হলো একটি **security vulnerability**, যা সাধারণত **web applications**-এ দেখা যায়। XSS আক্রমণের মাধ্যমে একজন **attacker** ওয়েবসাইটের **input fields, URL parameters, বা cookies**-এর মাধ্যমে ক্ষতিকর **JavaScript code** ইনজেক্ট করতে পারে। যখন কোনো **user** সেই আক্রান্ত পেজটি ব্রাউজ করে, তখন ওই ক্ষতিকর **script** তার ব্রাউজারে চালিত হয়, যার ফলে **data theft, session hijacking, phishing, malicious redirects** ইত্যাদির মতো ঘটনা ঘটতে পারে।

### **XSS কিভাবে কাজ করে?**

XSS মূলত **user input validation-এর অভাবে** ঘটে। যখন একটি ওয়েবসাইট **user input** কে যথাযথভাবে **sanitize বা escape** না করে, তখন **attacker** সুযোগ নেয় এবং **malicious script** ইনজেক্ট করে। এই **script** ব্যবহারকারীর **session cookies, credentials, বা অন্যান্য sensitive data** চুরি করতে পারে।

***

### **XSS-এর প্রকারভেদ**

XSS সাধারণত তিনটি প্রধান ক্যাটাগরিতে বিভক্ত:

#### **1. Stored XSS (Persistent XSS)**

এই ধরণের আক্রমণে **malicious script** সরাসরি **database, message board, comment section, forum post** ইত্যাদির মধ্যে সংরক্ষিত হয়। যখনই একজন ব্যবহারকারী সেই আক্রান্ত কনটেন্ট দেখে, তখন **script** স্বয়ংক্রিয়ভাবে চালিত হয়।

**উদাহরণ:**\
ধরা যাক, একটি ব্লগ সাইট আছে যেখানে ব্যবহারকারীরা কমেন্ট করতে পারে। যদি অ্যাপ্লিকেশন **user input** ঠিকমতো **sanitize** না করে, তাহলে নিচের মতো **malicious script** সংরক্ষণ হয়ে যেতে পারে –

```html
<script> alert('Your session has been hijacked!'); </script>
```

এখন, যখনই অন্য কোনো **user** সেই কমেন্ট লোড করবে, তখন স্ক্রিপ্টটি চলবে এবং ব্যবহারকারীর তথ্য চুরি হতে পারে।

***

#### **2. Reflected XSS**

এই ধরণের আক্রমণে **malicious script** সরাসরি কোনো **URL parameter বা form input**-এর মাধ্যমে ওয়েবসাইটে প্রবেশ করানো হয় এবং **response-এর মধ্যে reflect** হয়। এটি সাধারণত **phishing attacks**-এ ব্যবহৃত হয়।

**উদাহরণ:**\
ধরা যাক, একটি সার্চ ফিচার আছে যা ব্যবহারকারীর ইনপুট ব্রাউজারে রেন্ডার করে –

```python
from flask import Flask, request

app = Flask(__name__)

@app.route('/search')
def search():
    query = request.args.get('q', '')
    return f"<h1>Results for: {query}</h1>"

if __name__ == "__main__":
    app.run()
```

এখন, যদি ব্যবহারকারী **URL**-এ নিচের মতো **malicious query** দেয় –

```
http://example.com/search?q=<script>alert('Hacked!')</script>
```

তাহলে **script** ব্যবহারকারীর ব্রাউজারে **execute** হবে, কারণ ইনপুট যথাযথভাবে **sanitize** করা হয়নি।

***

#### **3. DOM-Based XSS**

এই ধরণের আক্রমণ সরাসরি **JavaScript DOM manipulation**-এর মাধ্যমে ঘটে, যেখানে **malicious script** ক্লায়েন্ট-সাইডে **execute** হয়, অথচ সার্ভার এতে কোনো ভূমিকা রাখে না।

**উদাহরণ:**\
ধরা যাক, নিচের মতো একটি **JavaScript code** আছে –

```html
<script>
    var userInput = window.location.hash.substring(1);
    document.getElementById("output").innerHTML = userInput;
</script>

<div id="output"></div>
```

এখন, যদি কেউ ব্রাউজারে নিচের মতো **URL** ব্যবহার করে –

```
http://example.com/#<script>alert('XSS!')</script>
```

তাহলে **script** সরাসরি **DOM**-এর মধ্যে ঢুকে **execute** হবে।

***

### **XSS প্রতিরোধের উপায়**

XSS প্রতিরোধ করার জন্য কিছু গুরুত্বপূর্ণ **best practices** অনুসরণ করা উচিত –

#### **1. Input Validation এবং Sanitization**

সব ধরনের **user input** ভালোভাবে যাচাই করতে হবে এবং **malicious code** ফিল্টার করতে হবে। উদাহরণস্বরূপ, **Python Flask** ব্যবহার করে **input sanitization** করা যেতে পারে –

```python
import html

@app.route('/search')
def search():
    query = request.args.get('q', '')
    safe_query = html.escape(query)
    return f"<h1>Results for: {safe_query}</h1>"
```

এতে করে `<script>` ট্যাগ সরাসরি HTML হিসেবে রেন্ডার না হয়ে **escaped text** হয়ে যাবে।

***

#### **2. Content Security Policy (CSP) ব্যবহার করা**

**CSP** হলো একটি **security feature**, যা নির্দিষ্ট করে দেয় কোন স্ক্রিপ্ট কোথা থেকে লোড করা যাবে। উদাহরণস্বরূপ, নিচের **CSP header** সেট করা হলে, শুধুমাত্র নির্দিষ্ট উৎস থেকে **script** লোড হবে –

```http
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedsource.com
```

***

#### **3. HTTPOnly এবং Secure Cookies ব্যবহার করা**

**Session Hijacking** থেকে রক্ষা পেতে **cookies**-কে **HTTPOnly** এবং **Secure** করতে হবে, যাতে **JavaScript** এগুলো অ্যাক্সেস করতে না পারে –

```python
response.set_cookie("session_id", value=session_id, httponly=True, secure=True)
```

***

#### **4. JavaScript এর `innerHTML` এড়িয়ে চলুন**

**DOM-Based XSS** প্রতিরোধের জন্য **innerHTML** ব্যবহারের পরিবর্তে **textContent** বা **setAttribute** ব্যবহার করা উচিত –

```javascript
document.getElementById("output").textContent = userInput;
```

***

XSS ওয়েব অ্যাপ্লিকেশনগুলোর জন্য একটি ভয়ংকর **security vulnerability**, যা **data theft, phishing, malware injection**-এর মতো ভয়াবহ ঝুঁকি তৈরি করতে পারে। তবে, যদি আমরা **input validation, CSP, HTTPOnly cookies, এবং secure JavaScript coding practices** অনুসরণ করি, তাহলে **XSS Attacks** থেকে ওয়েব অ্যাপ্লিকেশনকে সুরক্ষিত রাখা সম্ভব।

আপনার ওয়েব অ্যাপ্লিকেশনে **XSS protection** ঠিকমতো কাজ করছে কি না, তা সবসময় **penetration testing** করে নিশ্চিত করুন!&#x20;
