حمله XSS یا Cross Site Scripting یکی از رایج‌ترین حملات سایبری تحت وب محسوب می‌شود که در میان انواع حملات در جایگاه بالایی قرار می‌گیرد. مخفف این عبارت CSS است اما برای آنکه با زبان برنامه‌نویسی اشتباه گرفته نشود به آن XSS می‌گویند. روش حمله از طریق تزریق کدهای مخرب به صفحه‌ی وب قربانی و اجرای این کدهای جاوا اسکریپت توسط مرورگر است که در نهایت منجر به دسترسی غیر مجاز به اطلاعاتی مثل مشخصات کاربری یا اطلاعات حساب قربانی خواهد شد. پرکاربردترین روش نفوذ، افزودن کدهای مخرب به انتهای URL است که با کلیک بر روی لینک‌های مختلف توسط کاربر اجرا می‌گردد. همچنین هکر با دسترسی به دیتابیس وب‌سایت و قرار دادن اسکریپت، امکان آلوده کردن صفحه‌ی وب را در مقیاسی بزرگ‌تر دارد.

 

حمله XSS چگونه رخ می‌دهد؟

با یک تعریف فنی، حمله XSS بر مبنای تزریق کد سمت Server Side یا Client Side رخ می‌دهد. هنگامی که کاربری وارد یک سایت می‌شود، اطلاعات حساب کاربری یا اطلاعات حساب بانکی روی مرورگر ذخیره می‌شود. با باز کردن یک صفحه‌ی سایت، کلیک روی یک لینک مخرب در ایمیل یا شبکه‌های اجتماعی، یک اسکریپت به شکل مخفی بر روی کامپیوتر قربانی اجرا می‌گردد که هکر از طریق نفوذ غیر مجاز به کوکی‌ها (Cookies) به اطلاعات ذخیره شده‌ی کاربر دسترسی پیدا می‌کند. بعنوان مثال ممکن است پس از ورود اطلاعات حساب یا اطلاعات کاربری روی یکی از سایت‌های موسسات مالی که برای مقابله با XSS ایمن نیستند، این اطلاعات بوسیله‌ی هکر و بدون آگاهی کاربر در سمت Client مورد سوء استفاده و سرقت قرار گیرد.

 

انواع آسیب‌پذیری در حمله XSS

حملات Cross Site Scripting انواع مختلفی از آسیب‌پذیری‌ها را شامل می‌شوند که در هر یک کاربر یا وب‌سایت به شکلی متفاوت مورد حمله قرار می‌گیرد.

Reflected: در این نوع آسیب‌پذیری که به عنوان رایج‌ترین حمله XSS از آن یاد می‌شود، درخواست اسکریپت مخرب از صفحه HTTP فعال فعلی می‌آید.

Stored: این آسیب‌پذیری در حمله Cross Site Scripting مربوط به پایگاه‌داده وب‌سایت است.

DOM-Based: آسیب‌پذیری سوم از انواع حمله‌ تزریق کد مخرب مربوط به حفره‌های امنیتی در کدهای سمت سرویس‌گیرنده (Client Side Code) است و ارتباطی با کدهای Server Side ندارد.


انواع حمله XSS

حمله‌های XSS به شکل‌های مختلفی اتفاق می‌افتند. پرکاربردترین نوع دسته‌بندی این حملات بر اساس تداوم آن‌ها است. در این دسته‌بندی، این حملات به حمله‌های XSS مداوم و حمله‌های XSS غیر مداوم تقسیم می‌شوند.


حمله مداوم (Persistent)

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

 
حمله انعکاسی یا غیر مداوم ( Reflected or Non-persistent)

دومین نوع از حمله تزریق کدهای مخرب، حمله XSS از نوع غیرمداوم است. در این روش هکر از طریق لینک‌های مخرب که به روشهای مختلف در اختیار قربانی قرار داده است، اسکریپت خود را اجرا می‌کند. مثلن ممکن است مهاجم به انتهای یک URL اسکریپت خود را اضافه کرده باشد و از طریق ایمیل برای قربانی ارسال کند. زمانی که قربانی روی این لینک مخرب کلیک کند بدون آنکه متوجه شود اسکریپت فعال و هکر امکان دسترسی به اطلاعات کاربر را خواهد داشت.

 
عواقب حمله‌ XSS

مهاجم پس از انجام موفقیت‌‌آمیز یک حمله‌ی XSS می‌تواند اقدامات مختلفی را انجام دهد. در این بخش تعدادی از پرتکرارترین عواقب حملات Cross Site Scripting را بررسی می‌کنیم:

۱. جعل هویت قربانی.
۲. انجام هرگونه کاری که کاربر توانایی انجام آن را دارد.
۳. دسترسی غیرمجاز به هر اطلاعاتی که کاربر امکان دسترسی دارد.
۴. دسترسی به اطلاعات حساب کاربری و اطلاعات حساب بانکی.
۵. امکان تغییر ظاهر وب‌سایت (Deface).
۶. تزریق Trojan به وب‌سایت.

 

چگونه می‌توان آسیب‌پذیری XSS را پیدا کرد؟

پیش از آنکه سرویس‌دهنده و سرویس‌گیرنده متحمل خسارت شوند بهتر است صفحات وب درون‌سازمانی یا برون‌سازمانی (صفحات اینترنتی) مورد بررسی و ارزیابی قرار گیرند. ابزارها و روش‌های زیادی برای تشخیص و تست نفوذ حفره‌های امنیتی صفحات وب وجود دارد که می‌توانند تا حد زیادی با آگاهی‌رسانی از وضعیت موجود، از خسارات احتمالی جلوگیری کنند. بیشتر اوقات حفره‌های امنیتی برای جلوگیری از حمله تزریق کدهای مخرب با استفاده از ابزارهای اسکن و تست نفوذ صفحات وب مشخص می‌شوند. ابزارهایی مثل Burp Suite و ScanT3r می‌توانند در شناسایی حفره‌های امنیتی صفحات وب کمک کنند.

 

جلوگیری از حملات XSS

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

 
داشتن فیلتر در ابتدای ورود

در نقطه‌ای که داده‌های ورودی کاربر دریافت می‌شود، تا آنجا که امکان دارد بر اساس داده‌های مورد انتظار و معتبر فیلتر تعیین شود. یکی از مطمئن‌ترین فیلترها دیوار آتش وب یا WAF است.

 
رمزگذاری داده در زمان خروج

در نقطه‌ای که داده‌های User-Controllable در خروجی پاسخ‌های HTTP (HTTP Responses) وجود دارد، داده‌های خروجی رمز (Encode) شوند و متناسب با خروجی از ترکیب رمزگذاری روی HTML ،URL ،JavaScript و CSS استفاده شود.

 
استفاده از Response Header مناسب

برای جلوگیری از پاسخ‌های HTTP (HTTP Responses) که در برگیرنده هیچ‌کدام از کدهای HTML و جاوا اسکریپت نیستند، بهتر است از Content-Type و  X-Content-Type-Options در هدر صفحه وب استفاده کرد و از این طریق مرورگر به پاسخ‌های معتبر و مورد انتظار محدود خواهد شد.

 
سیاست‌های امنیت محتوا (Content Security Policy)

به عنوان آخرین روش برای جلوگیری از حمله‌‌ی Cross Site Scripting می‌توان از سیاست‌های امنیت محتوا (CSP) استفاده کرد.