حمله XSS چیست و چطور میتوان از آن جلوگیری کرد؟
حمله Cross-Site Scripting یا XSS یکی از شایعترین آسیبپذیریهای امنیتی وب است که در آن مهاجمان سایبری با اجرای اسکریپتهای مخرب در مرورگر کاربران از طریق وبسایتهای قانونی، کاربران را هدف قرار میدهند.
مجرمان تهدیدات سایبری در این نوع حمله، یک کد مخرب را به وبسایت هدف وارد میکنند؛ کدی که هنگام اجرا توسط کاربر، میتواند اطلاعات مهم او را سرقت کند یا حتی کنترل کامل مرورگر را در اختیار مهاجم قرار دهد.
این حملات به طور معمول به دلیل وجود آسیبپذیریهای امنیتی در اپلیکیشنهای تحت وب اتفاق میافتند و به مهاجم اجازه میدهند هویت کاربر را جعل کرده و به تمام دادهها او دسترسی پیدا کند.
برای مثال، اگر کاربر دسترسیهای ویژهای به اپلیکیشن سازمانی داشته باشد، مهاجم میتواند کنترل کامل دادهها و امکانات آن اپلیکیشن را به دست بگیرد.
کد مخرب به گونهای به مرورگر ارسال میشود که مرورگر نمیتواند تشخیص دهد این کد از منبعی ناامن آمده است. به همین دلیل، مهاجم میتواند به اطلاعات مهم مانند cookieها، session tokenها و سایر دادههای ذخیرهشده در مرورگر دسترسی پیدا کند یا حتی محتوای صفحه وب را تغییر دهد. وبسایتهایی که امکان ثبت نظر یا ارسال پیام توسط کاربران را فراهم میکنند، مانند فرومها و تالارهای گفتگو، معمولا بیشتر در معرض این حملات هستند.
نحوه عملکرد حمله XSS چگونه است؟
حملات Cross-Site Scripting یا XSS با استفاده از یک وبسایت آسیبپذیر انجام میشود؛ به طوری که این وبسایت، کد جاوااسکریپت مخرب را به کاربران بازمیگرداند. وقتی این کد مخرب در مرورگر قربانی، اجرا میشود، مهاجم میتواند کنترل کامل تعامل او با اپلیکیشن را در دست گیرد.
به زبان ساده مهاجم از ضعف امنیتی سایت، استفاده کرده تا اسکریپتی را به کاربر تحمیل کند؛ اسکریپتی که در ظاهر از خود سایت آمده، اما در واقع توسط مهاجم طراحی شده است.
معمولا یک حمله XSS در دو مرحله انجام میشود:
مرحله اول شامل روشی است که مهاجم برای ارسال کد مخرب (که به آن payload گفته میشود) به webpage مقصد استفاده میکند. این کار فقط زمانی ممکن است که وبسایت مورد نظر، ورودی کاربر را بدون فیلتر در صفحه نمایش دهد.
در این صورت، مهاجم کد مخرب را در همان صفحهای وارد میکند که کاربر بعدا آن را مشاهده خواهد کرد. وقتی کاربر به صفحه آلوده مراجعه میکند، مرورگر او کد مخرب را مانند بخشی از کد اصلی سایت اجرا میکند؛ نه به عنوان ورودی کاربر.
مرحله دوم زمانی اتفاق میافتد که قربانی از وبسایت آلوده به کد مخرب، بازدید میکند.
برای رساندن قربانی به این وبسایت، مهاجمان معمولا از مهندسی اجتماعی یا حملات فیشینگ استفاده میکنند. آنها ممکن است لینکی را در ایمیل، پیامک یا شبکههای اجتماعی ارسال کنند تا کاربر را ترغیب به کلیک و بازدید از صفحه آلوده کنند.
به محض باز شدن صفحه، کد مخرب در مرورگر قربانی اجرا میشود و مهاجم میتواند به دادههای وی، session کاربر یا حتی کنترل کامل تعامل او با وبسایت دست پیدا کند.

انواع حملات XSS
برای سالها متخصصام امنیت، انواع آسیبپذیری XSS را در سه دسته Stored، Reflected و DOM تقسیمبندی میکردند. اما واقعیت این است که این دستهبندیها کاملا از هم مجزا نیستند و در بسیاری از موارد با یکدیگر همپوشانی دارند. همین همپوشانیها باعث شد دستهبندی سنتی XSS ناکارمد به نظر برسد.
- Reflected XSS (cross-site scripting)
به آن non-persistent XSS نیز گفته میشود و سادهترین و رایجترین نوع حمله XSS است. در این روش کد مخرب (payload) باید در یک درخواست ارسالی به سرور قرار گیرد و سپس در پاسخ HTTP به کاربر بازگردانده شود.
معمولا مهاجمان با ارسال لینکهای آلوده یا ایمیلهای فیشینگ، کاربران را ترغیب به ارسال این درخواست میکنند. از آنجا که این نوع حمله در دادههای سرور ذخیره نمیشوند، مهاجم باید خودش لینک آلوده را به قربانی برساند. این حمله اغلب از طریق ایمیل یا شبکههای اجتماعی گسترش مییابد.
- Stored XSS (cross-site scripting)
به آن persistent XSS نیز گفته میشود و یکی از مخربترین انواع حملات XSS است. در این روش مهاجم، کد مخرب را به اپلیکیشن هدف ارسال میکند. اگر اپلیکیشن فاقد اعتبارسنجی ورودی باشد، این کد مخرب به صورت دائمی در محلهایی مانند پایگاه داده ذخیره میشود.
در عمل، مهاجم میتواند اسکریپت مخرب را در فیلدهایی مانند بخش نظرات یک وبلاگ یا انجمن وارد کند. با باز شدن صفحه آلوده در مرورگر کاربر، کد مخرب درست مانند محتوای معمولی بارگذاری میشود و قربانی، ناخواسته اسکریپت را اجرا میکند.
- DOM-based XSS (cross-site scripting)
یک نوع پیشرفته از حملات XSS است که در مرورگر رخ میدهد و در آن دادههای ورودی کاربر بهطور مستقیم در Document Object Model (DOM) قرار میگیرند و سپس مرورگر آنها را اجرا میکند. این کد مخرب فقط در مرورگر اجرا میشود و به سرور ارسال نمیشود، به همین دلیل کشف و جلوگیری از آن توسط فایروال و لاگهای سرور دشوارتر است. مهاجمان معمولا بخشهایی مانند URL، anchor و referrer را در DOM دستکاری میکنند.
از حدود سال ۲۰۱۲، برای رفع پیچیدگیهای ناشی از همپوشانی مفهومی در انواع XSS، جامعه پژوهشی امنیت سایبری رویکرد تازهای را پیشنهاد کرد. بر پایه این رویکرد، یک چارچوب سادهتر و دقیقتر برای دستهبندی حملات XSS معرفی شد که آنها را بهطور کلی در دو گروه اصلی تقسیم میکند:
- Server XSS؛
- Client XSS.
Server XSS
این نوع حمله XSS، کد مخرب توسط کاربر وارد میشود، اما اشتباه اصلی در سمت سرور اتفاق میافتد. سرور بدون بررسی، این کد را در پاسخ HTTP قرار داده و برای مرورگر ارسال میکند. مرورگر هم با فرض ایمن بودن پاسخ، آن را اجرا میکند. در واقع در این حمله سرور باعث ایجاد آسیبپذیری شده است. کد مخرب میتواند مستقیما از ورودی کاربر باشد (Reflected) یا قبلا در پایگاه داده ذخیره شده باشد (Stored).
Client XSS
حملات Client XSS زمانی رخ میدهد که دادهای که از طرف کاربر وارد شده، به شکل ناامن توسط جاوااسکریپت در بخش DOM صفحه بهروزرسانی شود. به عبارتی یک کد جاوااسکریپت میتواند به صورت ناامن اجرا شود و کد مخرب وارد صفحه شود. این داده ممکن است مستقیم از DOM صفحه گرفته شده باشد یا توسط سرور ارسال شده باشد، مانند AJAX call.
منبع اصلی این دادهها میتواند از درخواستهای کاربر یا دادههای ذخیرهشده در سمت کلاینت یا سرور باشد. بنابراین، ممکن است این حمله هم به صورت Reflected و هم به صورت Stored رخ دهد.
DOM Based XSS در واقع زیرمجموعهای از همین Client XSS است که دادههای مخرب فقط از داخل DOM صفحه نشات میگیرند و نه از سرور.
با این تعاریف، حملات XSS به شکل ساده و منظم به چهار نوع تقسیم میشوند: Client و Server در یک دسته و Stored و Reflected نیز در یک دسته دیگر که با ترکیب ماتریسی ۲ در ۲ شکل میگیرد.
چگونه میتوان آسیبپذیریهای XSS را شناسایی کرد؟
شناسایی آسیبپذیریهای XSS کار سادهای نیست. این آسیبپذیریها معمولا به عوامل مختلفی مانند نوع XSS، نحوه ارسال اطلاعات توسط کاربر و چارچوب برنامهنویسی یا زبان اسکریپتی که در توسعه اپلیکیشن به کار رفته، وابسته هستند. با این حال، در بیشتر موارد چنین آسیبپذیریهایی را با کمک اسکن آسیبپذیریهای وب (web vulnerability scanner) شناسایی کرد.
از سوی دیگر آسیبپذیریهای XSS ممکن است در هر مرحله از توسعه اپلیکیشن، به سادگی و یا ناخواسته به وجود آیند؛ بنابراین اسکن منظم اپلیکیشنهای تحت وب برای یافتن ناهنجاریها، فعالیتهای مشکوک یا آسیبپذیریهای احتمالی کاملا ضروری است.
چگونه میتوان مانع از آسیبپذیریهای XSS شد؟
با رعایت چند اصل کلیدی میتوان امنیت وبسایتها و اپلیکیشنهای تحت وب را برای کاربران تضمین کرد:
ارتقا سطح آگاهی امنیتی: کاربران باید با روشهای حملات آشنایی داشته باشند. آموزشهای منظم به کارکنان، آگاهی آنها را نسبت به تهدیدات روز، تقویت میکند.
فرض بر بیاعتمادی به دادههای ورودی: به طور کلی فرض بر این باشد که همه اطلاعات ورودی، آلوده است؛ مگر خلاف آن ثابت شود.
بهکارگیری Escape و Encode: این دو روش دفاعی برای جلوگیری از حملات Injection، به ویژه XSS بسیار موثر هستند و با تبدیل کاراکترهای مهم به معادل امن، مانع از تفسیر کدهای مخرب توسط مرورگر میشوند. برای مثال در زبانها و فناوریهای مختلف مانند HTML، JavaScript، CSS و URL، کتابخانههایی استاندارد برای این منظور وجود دارد مانند HTML Escape یا JavaScript Escape.
توصیه میشود حتما از این کتابخانههای معتبر استفاده شود و تا حد امکان از نوشتن روشهای سفارشی خودداری گردد؛ مگر در مواردی که به دلایل فنی، اجتنابناپذیر باشد.
بهکارگیری HTML Sanitizer: برای ورودهای که شامل HTML هستند، استفاده از تکنیک Escape مناسب نیست؛ زیرا ساختار تگها را خراب میکند. در این موارد باید از ابزارهای معتبر Sanitizer استفاده شود تا کدها به درستی بررسی و اصلاح شوند و تنها محتوای ایمن باقی بماند.
تنظیم گزینه HttpOnly: فعالسازی این گزینه برای cookieها به کاهش اثرات احتمالی آسیبپذیری XSS کمک میکند. با این تنظیم، کوکیها از طریق جاوااسکریپت client-side قابل دسترسی نیستند.
استفاده از :Content Security Policy (CSP) CSP یک response header در HTTP است که به مرورگر اجازه میدهد منابع داینامیک فقط از منابع مشخصشده بارگذاری شوند؛ این کار دامنه آسیب حملات را محدود میکند.
سوالات رایج درباره « حمله XSS چیست و چطور میتوان از آن جلوگیری کرد؟»
منظور از حمله Cross-Sie Scripting چیست؟
Cross-Site Scripting (XSS) یکی از رایجترین آسیبپذیریهای وبسایت و اپلیکیشنهای تحت وب است. در این حمله مهاجم یک کد مخرب را به سایت هدف ارسال میکند؛ زمانی که کاربر وارد سایت میشود، بدون اینکه مطلع شود، این کد روی مرورگر او اجرا میشود این موضوع میتواند منجر به سرقت اطلاعات، دسترسی غیرمجاز یا حتی کنترل کامل سیستم قربانی شود. حملات XSS معمولا بهعنوان بخشی از یک سناریوی حمله بزرگتر مورد استفاده قرار میگیرند.
یک حمله XSS چگونه اتفاق میافتد؟
زمانی اتفاق میافتد که مهاجم یک کد مخرب را از طریق ورودی کاربر مثل فرم، کامنت یا URL وارد سایت میکند. اگر سایت این ورودی را بررسی نکند و همان را به مرورگر کاربر نمایش دهد، کد مخرب اجرا میشود. این کد معمولا بهصورت JavaScript است و میتواند به اطلاعات کاربر را دسترسی پیدا کند یا عملیاتی مخرب انجام دهد. برای موفقیت حمله، مهاجم باید کد را وارد نموده و کاربر را به بازدید از آن صفحه ترغیب کند.
سادهترین راهکار شناسایی حمله Cross-Site Scripting چیست؟
سادهترین راه شناسایی حمله XSS استفاده از ابزارهای اسکن امنیتی وب است. این اسکنرها سایت را بررسی میکنند و نقاط ضعف احتمالی را شناسایی میکنند.
سوالات رایج درباره « حمله XSS چیست و چطور میتوان از آن جلوگیری کرد؟»
منظور از حمله Cross-Sie Scripting چیست؟
Cross-Site Scripting (XSS) یکی از رایجترین آسیبپذیریهای وبسایت و اپلیکیشنهای تحت وب است. در این حمله مهاجم یک کد مخرب را به سایت هدف ارسال میکند؛ زمانی که کاربر وارد سایت میشود، بدون اینکه مطلع شود، این کد روی مرورگر او اجرا میشود این موضوع میتواند منجر به سرقت اطلاعات، دسترسی غیرمجاز یا حتی کنترل کامل سیستم قربانی شود. حملات XSS معمولا بهعنوان بخشی از یک سناریوی حمله بزرگتر مورد استفاده قرار میگیرند
یک حمله XSS چگونه اتفاق میافتد؟
زمانی اتفاق میافتد که مهاجم یک کد مخرب را از طریق ورودی کاربر مثل فرم، کامنت یا URL وارد سایت میکند. اگر سایت این ورودی را بررسی نکند و همان را به مرورگر کاربر نمایش دهد، کد مخرب اجرا میشود. این کد معمولا بهصورت JavaScript است و میتواند به اطلاعات کاربر را دسترسی پیدا کند یا عملیاتی مخرب انجام دهد. برای موفقیت حمله، مهاجم باید کد را وارد نموده و کاربر را به بازدید از آن صفحه ترغیب کند.
سادهترین راهکار شناسایی حمله Cross-Site Scripting چیست؟
سادهترین راه شناسایی حمله XSS استفاده از ابزارهای اسکن امنیتی وب است. این اسکنرها سایت را بررسی میکنند و نقاط ضعف احتمالی را شناسایی میکنند.







