اجرای کد مخرب در مرورگر کاربران
💡 مشاوره

مارک پلاس

تکنولوژی نوین اینترنتی

XSS چیست؟ حمله Cross Site Scripting

XSS چیست؟ حمله Cross Site Scripting

حمله XSS (Cross-Site Scripting) در وب

مقدمه

حمله XSS (Cross-Site Scripting) یکی از رایج‌ترین و مهم‌ترین آسیب‌پذیری‌های امنیتی در وب است. در این حمله، مهاجم کد JavaScript مخرب را در صفحات وب تزریق می‌کند و این کد در مرورگر کاربران اجرا می‌شود.

نتیجه این حمله می‌تواند شامل سرقت اطلاعات حساس، کوکی‌ها، تغییر محتوای صفحه و حتی انجام عملیات به نام کاربر باشد.


XSS چیست؟

XSS زمانی رخ می‌دهد که یک برنامه وب، داده‌های ورودی کاربر را بدون بررسی یا پاک‌سازی مناسب در خروجی HTML نمایش دهد.

در نتیجه مرورگر کاربر آن داده را به‌عنوان کد قابل اجرا تفسیر می‌کند، نه متن ساده.


انواع حمله XSS

1. Stored XSS (ذخیره‌شده)

در این نوع، کد مخرب در سرور ذخیره می‌شود (مثلاً در دیتابیس) و هر بار که صفحه بارگذاری می‌شود، برای همه کاربران اجرا می‌شود.

مثال:

یک کامنت در سایت:

<script>alert('Hacked')</script>

اگر این کامنت ذخیره شود، هر کاربری که صفحه را باز کند، اسکریپت اجرا می‌شود.


2. Reflected XSS (بازتابی)

در این حالت، کد مخرب از طریق URL یا درخواست HTTP ارسال می‌شود و بلافاصله در پاسخ سرور بازتاب داده می‌شود.

مثال:

https://site.com/search?q=<script>alert(1)</script>

اگر سایت ورودی را بدون فیلتر نمایش دهد، کد اجرا می‌شود.


3. DOM-Based XSS

در این نوع حمله، آسیب‌پذیری در سمت مرورگر (JavaScript) رخ می‌دهد، نه در سرور.

مثال:

document.write(location.hash);

اگر کاربر این لینک را باز کند:

site.com/#<script>alert(1)</script>

کد در مرورگر اجرا می‌شود.


نحوه عملکرد حمله XSS

  1. مهاجم کد مخرب را در ورودی سایت تزریق می‌کند
  2. سایت بدون فیلتر آن را نمایش می‌دهد
  3. مرورگر کاربر آن را به‌عنوان JavaScript اجرا می‌کند
  4. مهاجم به داده‌های کاربر دسترسی پیدا می‌کند

اهداف مهاجم در حمله XSS

سرقت کوکی‌ها

document.cookie

کوکی‌ها می‌توانند برای ورود غیرمجاز استفاده شوند.


سرقت اطلاعات کاربر

  • فرم‌های ورود
  • اطلاعات شخصی
  • توکن‌های نشست (Session Token)

انجام عملیات به نام کاربر

مثلاً:

  • ارسال پیام
  • تغییر رمز عبور
  • انجام تراکنش

تغییر ظاهر سایت (Defacement)

مهاجم می‌تواند محتوای صفحه را تغییر دهد:

document.body.innerHTML = "Hacked!";

تفاوت انواع XSS

نوعمحل اجرامیزان خطر
Storedسرور + کل کاربرانبسیار بالا
Reflectedدرخواست کاربربالا
DOM-Basedمرورگر کاربربالا

دلایل ایجاد آسیب‌پذیری XSS

1. عدم Escape کردن ورودی‌ها

نمایش مستقیم ورودی کاربر در HTML:

echo $_GET['name'];

2. عدم استفاده از فیلتر مناسب

ورودی‌ها بدون بررسی در صفحه قرار می‌گیرند.


3. استفاده ناامن از JavaScript

توابع خطرناک مانند:

  • innerHTML
  • document.write
  • eval()

پیامدهای حمله XSS

در صورت موفقیت، مهاجم می‌تواند:

  • سرقت کوکی‌ها و Session
  • دسترسی به حساب کاربر
  • اجرای عملیات غیرمجاز
  • انتشار بدافزار
  • تغییر محتوای سایت

روش‌های پیشگیری از XSS

1. Escape کردن خروجی (Output Encoding)

مهم‌ترین روش جلوگیری:

htmlspecialchars($input, ENT_QUOTES, 'UTF-8');

2. استفاده از Content Security Policy (CSP)

CSP می‌تواند اجرای اسکریپت‌های غیرمجاز را محدود کند:

Content-Security-Policy: default-src 'self'

3. عدم استفاده از innerHTML

به جای آن:

textContent

4. اعتبارسنجی ورودی‌ها

  • حذف تگ‌های HTML
  • محدود کردن نوع داده‌ها

5. HttpOnly برای کوکی‌ها

HttpOnly = true

این کار مانع دسترسی JavaScript به کوکی می‌شود.


6. استفاده از فریم‌ورک‌های امن

فریم‌ورک‌های مدرن مانند React یا Angular به‌طور پیش‌فرض از XSS جلوگیری می‌کنند (در بیشتر حالت‌ها).


جمع‌بندی

حمله XSS زمانی رخ می‌دهد که ورودی کاربر بدون بررسی مناسب در صفحات وب نمایش داده شود و به‌عنوان کد JavaScript اجرا شود. این آسیب‌پذیری می‌تواند منجر به سرقت اطلاعات، کنترل حساب کاربران و تخریب سایت شود.

با استفاده از Escape کردن خروجی، تنظیم CSP، استفاده از کوکی‌های امن و جلوگیری از اجرای مستقیم ورودی‌ها می‌توان از این حمله جلوگیری کرد.