حمله XSS یا Cross Site Scripting چیست و چگونه انجام می شود؟
در صورتی که شما هم در فضای اینترنت حضور داشته و در آن جا مشغول به گشت و گذار هستید، باید بدانید که در معرض حملات زیادی قرار خواهید گرفت. به خصوص اگر دارای پایگاه داده و اطلاعات حیاتی هستید، لازم است تا اقدامات پیشگیرانه زیادی را انجام دهید. هکرها از روش های مختلفی قصد ورود و آسیب رساندن به وب سایت ها و پایگاه های داده دارند. از این رو باید با برخی از این نوع حمله ها آشنا بوده و بدانید که SQL Injection چیست و یا حمله XSS چگونه انجام می شوند. ما در این مطلب قصد داریم تا به صورت کامل در خصوص حمله XSS و روش های انجام و پیشگیری آن بیشتر صحبت کنیم.
حملات Cross-Site Scripting (XSS) چه هستند؟
امروزه از جاوا اسکریپت برای ساخت وب سایت ها و برنامه های کاربردی آنلاین بسیار زیادی استفاده می شود. در حالی که جاوا اسکریپت به کاربران و وب سایت ها اجازه می دهد تا کارهای بسیار جذابی را انجام دهند، اما با این وجود، ممکن است در معرض تهدیدهای بسیار حساسی قرار گرفته باشد. حمله XSS یا Cross-Site Scripting یکی از مهمترین این تهدیدها است که لازم است با آن آشنا شوید.
حمله XSS یا Cross-site scripting زمانی رخ می دهد که هکرها، کدهای جاوا اسکریپت مخرب را در مرورگر قربانی اجرا می کنند. برخلاف حملات Remote Code Execution (RCE) که برنامه مخرب مستقیما در سیستم قربانی نصب و اجرا می گردد، در این نوع حمله، کد در مرورگر کاربر اجرا می شود. پس از تزریق اولیه، سایت معمولاً به طور کامل توسط مهاجم کنترل نمی شود. در عوض، هکرها در ابتدا کد مخرب خود را در یک وب سایت قرار می دهند. بدین صورت می توانند به سادگی مرورگرها را فریب دهند تا هر زمان که سایت بارگذاری می شود، بدافزار خود را اجرا کنند.
حملات Cross-Site Scripting چگونه کار می کنند؟
حمله XSS زمانی انجام می شود که یک آسیب پذیری قابل توجه در وب سایت ها وجود داشته باشد. در این هنگام مهاجم این فرصت را دارد تا کد خود را به یک صفحه وب تزریق کنند. بعد از تزریق کد آلوده به صفحه وب، مهاجم این فرصت را دارد تا اسکریپت خود را به کامپیوتر قربانی، از طریق مرورگر مورد استفاده او، وارد کند.
از آنجایی که جاوا اسکریپت در صفحه مرورگر قربانی اجرا می شود، جزئیات حساس در مورد کاربر احراز هویت شده را می توان از سشن (Session) به سرقت برد، که اساسا به یک مهاجم یا هکر اجازه می دهد تا مدیران سایت را هدف قرار داده و یک وب سایت را به طور کامل در معرض خطر قرار دهند.
یکی دیگر از کاربردهای محبوب حمله XSS یا Cross-site scripting زمانی است که اکثر صفحات در دسترس عموم یک وب سایت قانونی، آسیب پذیر هستند. در این حالت، مهاجمان می توانند کد خود را برای هدف قرار دادن بازدیدکنندگان وب سایت با افزودن تبلیغات، درخواست های فیشینگ یا سایر محتوای مخرب، تزریق کنند.
مثالی از حمله XSS یا Cross-site scripting
برای آشنایی هر چه بیشتر با این مدل از حملات، اجازه دهید تا مثالی را برای شما بازگو کنیم. تصور کنید که فردی در حال کار با کامپیوتر خود است. در این حالت صفحه نمایشگر کاربر، برنامه های مختلفی مانند File manager ، Text editor ، Spreadsheet و یا Music player را در پایین صفحه به کاربر نشان می دهد. تا بدین لحظه هیچ چیز غیر عادی وجود ندارد. اما در پشت همه این اتفاقات، اتفاق شوم دیگری در حال رخ دادن است که کاربر از آن اطلاع ندارد!
این اتفاق نیز باز شدن یک مرورگر اینترنت است که ده ها تب (Tab) مختلف را به صورت همزمان باز کرده است. این تب ها دارای عناوین بسیار گسترده، از برنامه های خنده دار، تا حواشی های مختلف هستند. آن چیزی که در همه این وب سایت ها مشترک است این نکته خواهد بود که بدون جاوا اسکریپت، امکان نبود آن ها به وجود بیایند.
حال کافی است تا قربانی روی یکی از بنرهای تبلیغاتی موجود کلیک کند. در این حالت به یک صفحه دیگری وارد شده که حاوی کدهای اسکریپتی است که کاربر را به یک سایت بانکی آنلاین متصل خواهد کرد. در این حالت، کاربر بدون آن که متوجه شود، پول را از حساب خود به حساب مهاجم منتقل می کند. به همین راحتی، یک کاربر اسیر حمله XSS خواهد شد.
استفاده از جاوا اسکریپت در حمله XSS یا Cross-Site Scripting
جاوا اسکریپت یک زبان برنامه نویسی است که بر روی صفحات وب داخل مرورگر شما اجرا می شود. این کد سمت کلاینت، قابلیت تعامل را به صفحه وب اضافه کرده و به طور گسترده در همه برنامه های کاربردی اصلی و پلتفرم های CMS استفاده می شود. برخلاف زبان های سمت سرور مانند PHP، کد جاوا اسکریپت در مرورگر شما نمی تواند روی وب سایت برای بازدیدکنندگان دیگر تأثیر بگذارد. این سندباکس در مرورگر خود شما قرار دارد و فقط می تواند اقداماتی را در پنجره مرورگر شما انجام دهد.
در حالی که جاوا اسکریپت سمت کلاینت است و روی سرور اجرا نمی شود، می توان از آن برای تعامل با سرور برای انجام درخواست های پس زمینه استفاده کرد. مهاجمان می توانند از این درخواست های پس زمینه برای افزودن محتوای هرزنامه ناخواسته به یک صفحه وب بدون بازخوانی آن، جمعآوری تجزیه و تحلیل درباره مرورگر مشتری و یا انجام اقدامات به صورت ناهمزمان استفاده کنند.
معرفی انواع حمله XSS یا Cross-Site Scripting
حال که اطلاعات اولیه در خصوص حمله XSS را به دست آوردید، لازم است تا بیشتر با این موضوع آشنا شوید. بسته به اهداف هکرها، امکان استفاده از انواع مختلفی از حملات Cross-Site Scripting وجود دارد. در واقع مهاجمان این فرصت را دارند تا از Cross-Site Scripting به روش های مختلفی استفاده کنند. برخی از مهمترین این حملات عبارت اند از:
- XSS ذخیره شده (Stored cross-site scripting)
یکی از مخرب ترین حملات XSSها، XSS ذخیره شده است. این حمله مواقعی صورت می گیرد که بار اطلاعات مخرب که از سوی مهاجمان منتشر می شود، در سرور ذخیره شود. این بار به صورت دائمی در معرض صفحات وب سایت قرار می گیرند و زمانی که کاربران در حال مرور معمولی وب سایت هستند، این اسکریپت ها فعال خواهند شد.
- XSS منعکس شده
از دیگر حملات بسیار متداول XSS، حمله XSS منعکس شده است. این حمله زمانی اتفاق می افتد که جاوا اسکریپت، داده ها را از منابع کنترل شده هکرها دریافت کرده و آن ها را به محیط DOM ارسال می کند. این امر موجب می شود تا مرورگر فرد هدف قرار داده شده، به صورت کاملا غیر منتظره ای باز شود.
- XSS مبتنی بر محیط DOM (DOM-Based Cross-Site Scripting)
نوع دیگری از حملات XSS، حملات مبتنی بر محیط DOM است. در واقع بخشی از کدهای مخرب در این نوع از حملات، کدهای HTML هستند. منبعی که کدهای مخرب در آن قرار داده می شود، قادر است تا یک URL و یا یک عنصر به خصوص از HTML باشد.
از دیگر حملات Cross-Site Scripting می توان به Self Cross-Site Scripting و lind Cross-Site Scripting اشاره کرد.
چگونه از حملات XSS یا Cross-Site Scripting جلوگیری کنیم؟
به یاد داشته باشید که مهاجرمان از روش های مختلفی برای حمله XSS استفاده می کنند. آن ها از آسیب پذیری های وب سایت ها سوء استفاده کرده و کدهای مخرب خود را پخش می کنند. از این رو به صورت دقیق و واحد، هیچ راهی برای کاهش خطرات حمله XSS وجود ندارد. با این حال باید بدانید که مفهوم Cross-Site Scripting بر ورودی ناامن کاربر که مستقیما در یک صفحه وب ارائه می شود، متکی خواهد بود. در صورتی که ورودی های کاربر (مثل باکس متنی بخش نظرات) به درستی پاکسازی شوند، حملات Cross-Site Scripting غیر ممکن خواهند شد.
از این رو جهت کاهش خطرات حمله XSS لازم است تا به ورودی های کاربر توجه شود. راه های متعددی برای اطمینان از این که ورودی های کاربر در وب سایت شما قابل دسترسی نخواهد بود، وجود دارد. پیشنهاد می کنیم که از روش های زیر استفاده کنید:
نصب یک افزونه امنیتی
در صورتی که وب سایت شما با وردپرس ایجاد شده است، استفاده از یک افزونه امنیتی برای جلوگیری از حملات XSS ضروری خواهد بود. البته به یاد داشته باشید که یک افزونه مطمئن و مناسب را دانلود و نصب کنید. مطمئن شوید که افزونه مورد نظر شما، عملکرد مناسبی برای ایمن نگه داشتن وب سایت شما خواهد داشت. بهترین افزونه برای جلوگیری از حملات Cross-Site Scripting، افزونه ای است که:
- به صورت مرتب وب سایت شما را جهت اطمینان از نبود بدافزار، اسکن کند.
- از فایروال های برای جلوگیری از هرگونه ترافیکی که امکان دارد تهدید آمیز به نظر برسد، استفاده کند.
- قادر به پیاده سازی اقدامات امنیتی مورد نیاز وردپرس باشد.
- امکان مدیریت کردن به آپدیت های متنوع وردپرس را داشته باشد.
- از وب سایت شما، بکاپ تهیه کند. در این صورت حتی اگر حمله ای رخ دهد، امکان بازیابی وب سایت وجود خواهد داشت.
استفاده از افزونه های اختصاصی
در کنار افزونه های امنیتی، افزونه هایی وجود دارند که مخصوص جلوگیری از حمله XSS طراحی شده اند. این افزونه ها می توانند پارامترهایی که در چنین حملاتی مورد استفاده قرار می گیرند را مسدود کنند. بدین صورت دیگر امکان حمله XSS وجود ندارد.
از دیگر راه های جلوگیری از حمله Cross-Site Scripting می توان به اجتناب و محدود کردن HTML در ورودی ها، پاکسازی Valueها، استفاده از فلگ HTTPOnly در کوکی و بهره مندی از WAF اشاره کرد.