XSS زمانی رخ می‌دهد که یک سایت، ورودی کاربر را بدون escape کردن مستقیم در HTML خروجی می‌دهد و مرورگر آن را به‌عنوان کد اجرا می‌کند.

سه نوع اصلی XSS

  • Stored: کد مخرب در دیتابیس ذخیره و برای هر بازدیدکننده اجرا می‌شود (مثل یک کامنت مخرب).
  • Reflected: کد در همان درخواست (مثلاً پارامتر URL) بازتاب داده می‌شود.
  • DOM-based: مشکل کاملاً در جاوااسکریپت سمت کلاینت است، بدون دخالت سرور.

مهاجم با XSS چه کاری می‌تواند بکند؟

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

دفاع اصلی

خروجی را همیشه escape کنید (اکثر فریمورک‌های مدرن این کار را پیش‌فرض انجام می‌دهند)، و یک Content-Security-Policy سخت‌گیرانه تنظیم کنید تا حتی اگر کد مخرب تزریق شد، اجرا نشود.

Escape خروجی و CSP، دفاع‌های اصلی در برابر XSS هستند.