XSS بازتابی (Reflected) در پارامتر جستوجو
چگونه یک پارامتر جستوجوی بدون encode، به اجرای جاوااسکریپت دلخواه در مرورگر قربانی منجر میشود.
XSS بازتابی زمانی رخ میدهد که ورودی کاربر (معمولاً از query string) بدون escape مناسب، مستقیماً در خروجی HTML صفحه بازتاب داده شود. این نوع معمولاً نیاز به فریب قربانی برای کلیک روی یک لینک ساختهشده دارد.
نحوهی شناسایی
- هر پارامتری که مقدارش در پاسخ HTML دیده میشود را با یک رشتهی علامتگذاریشده (مثل
zzTESTzz) تست کنید. - اگر رشته عیناً در HTML (نه در یک attribute با escape مناسب) ظاهر شد، نقطهی تزریق پیدا شده.
- سپس payload واقعی را بسازید، مثلاً
<script>alert(document.domain)</script>یا وقتی تگ script فیلتر میشود،<img src=x onerror=alert(1)>.
تاثیر واقعی
سرقت کوکی نشست (در صورت نبود HttpOnly)، اجرای عملیات بهجای قربانی (CSRF از طریق جاوااسکریپت)، keylogging، یا redirect به یک صفحهی فیشینگ.
راهحل
Context-aware output encoding (escape متفاوت برای HTML body، attribute، URL و JS)، بههمراه یک CSP سختگیرانه بدون unsafe-inline بهعنوان دفاع لایهی دوم.