حملات XSS چیست و چطور باید از آن جلوگیری کرد؟

حملات XSS

حمله تزریق اسکریپت از طریق وبگاه (Cross-Site Scripting) یا همان XSS یکی از حملات متداول هکرها برای مقاصد خرابکارانه در فضای وب به شمار می رود. اگرچه مخفف اصلی این حمله CSS می باشد اما چون با کدهای CSS اشتباه است. برای همین عبارت XSS را برای آن در نظر گرفته اند. امروز قصد داریم به معرفی حملات XSS بپردازیم. نحوه جلوگیری از بروز آن را به شما آموزش دهیم، پس تا انتهای مقاله با ما همراه باشید.

حملات XSS چیست؟

حملات XSS نوعی حمله تزریق کد در بخش سمت-کاربر (Client-Side) به شمار می رود. در این حمله فرد مهاجم سعی دارد کدهای مخرب خود را از طریق یک صفحه وب مشروع در مرورگر کاربران اینترنتی اجرا کند و حمله اصلی زمانی اتفاق می افتد که قربانی از آن صفحه وب یا وب اپلیکیشن بازدید کند.

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

اگر صفحه وب از ورودی کاربران آلوده در خروجی تولید شده خود استفاده کند. در برابر حملات XSS آسیب پذیر می شود و ورودی کاربر سپس باید توسط مرورگر قربانی تجزیه شود. بروز حملات XSS در زبان VBScript، فناوری ActiveX، Flash و حتی CSS امکان پذیر است. البته بیشترین حملات در زبان جاوا اسکریپت رخ می دهد چرا که این زبان از عناصر اصلی مرورگرهای اینترنتی به شمار می رود.

حملات XSS و کاربران

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

برخی از هکرها نیز به جای هدف قرار دادن کاربران از حملات XSS برای از کار انداختن وبسایت ها استفاده می کنند. در این صورت هکر می تواند برای تغییر محتوای وبسایت یا هدایت مرورگر قربانی به صفحات آلوده استفاده کند.

هکر و جاوا اسکریپت

حملات XSS در مقایسه با تزریق SQL خطر کمتری دارند. تزریق جاوا اسکریپت به یک صفحه وب در نگاه اول ممکن است اصلا خطرناک نباشد. چرا که اکثر مرورگرهای اینترنتی کدهای جاوااسکریپت را در محیطی اجرا می کنند. جاوا اسکریپت نیز محدودیت هایی برای دسترسی به سیستم عامل و فایل های کاربر در نظر دارد. با این حال اگر جاوااسکریپت به عنوان بخشی از یک محتوای مخرب مورد استفاده قرار گیرد بسیار خطرناک خواهد بود :

  • جاوااسکریپت مخرب می تواند به تمام آبجکت هایی (Objects) که بقیه صفحات وب به آن دسترسی دارند نفوذ کند. برای مثال کوکی های کاربر یکی از بخش هایی است که جاوااسکریپت مخرب قادر است به آن دسترسی پیدا کند. با توجه به این نکته که Session Tokenها معمولا در کوکی های کاربر ذخیره می شوند اگر یک هکر آن ها را در اختیار داشته باشد، آنگاه قادر است با جعل هویت کاربر از طرف وی اقدامات سودجویانه ای انجام دهد و به دیتای حساس کاربر نیز دسترسی پیدا کند.
  • جاوا اسکریپت مخرب قادر است DOM مرورگر اینترنتی را بخواند و سپس تغییرات دلخواه خود را بر روی آن اعمال کند. خوشبختانه این موضوع تنها در صفحاتی که جااسکریپت در آن ها اجرا می شود امکان پذیر است.

حملات XSS چطور کار می کند؟

یک حمله XSS معمولی به دو بخش تقسیم می شود که عبارتند از:

  1. هکر برای اجرای کدهای مخرب در مرورگر قربانی باید ابتدا راهی برای تزریق کد به یک صفحه وب که کاربر از آن بازدید می کند، پیدا کند.
  2. سپس قربانی باید از آن کدهای مخرب بازدید کند. اگر حمله برای یک فرد مشخصی در نظر گرفته شده باشد. هکر با استفاده از مهندسی اجتماعی یا فیشینگ می تواند یک URL آلوده برای وی ارسال کند.

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

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

برای اینکه از شر حملات XSS در امان باشید باید ورودی وبسایت خود را سالم نگه دارید. اپلیکیشن شما نیز نباید بدون بررسی دیتای ورودی آن را به صورت مستقیم به مرورگر کاربران ارسال کند. جلوگیری از حملات XSS آسان نیست به گونه ای که تکنیک های مقابله با آن به نوع حمله XSS، بستر استفاده از ورودی کاربر و فریم ورک و زبان برنامه نویسی وبسایت مورد نظر بستگی دارد. با این وجود یکسری اصول کلی و اولیه برای در امان ماندن از حملات XSS وجود دارد که در ادامه آنها را به صورت مختصر توضیح خواهیم داد:

۱- آموزش و حفظ آگاهی توسعه دهندگان :

تمام افراد درگیر در پروژه توسعه یک اپلیکیشن یا وبسایت باید از خطرات مربوط به آسیب پذیری XSS آگاه باشند. بنابراین شما باید آموزش های لازم درباره امنیت اپلیکیشن را به تمام برنامه نویسان، کارمندان تضمین کیفیت، تیم دوآپس (DevOps) و ادمین های سیستم ارائه دهید.

۲- عدم اعتماد به ورودی کاربران :

تمام ورودی های کاربران را به عنوان ورودی غیر قابل اعتماد در نظر بگیرید. در حقیقت هر ورودی کاربر که به عنوان بخشی از خروجی HTML استفاده شود مستعد حملات XSS می شود. بنابراین با ورودی های معتبر و کاربران داخلی نیز باید همانند ورودی های عمومی رفتار کنید.

۳- استفاده از تکنیک Escaping/Encoding :

با توجه به مکانی که ورودی های کاربران مورد استفاده قرار می گیرد از تکنیک Escaping/Encoding استفاده کنید. برای مثال شما می توانید از کتابخانه های HTML escape، JavaScript escape، CSS escape و URL escape استفاده کنید؛ به عبارت دیگر فقط در صورت نیاز از escapeهای خود استفاده کنید.

۴- پاکسازی HTML :

در صورتی که ورودی کاربران باید دارای HTML باشد، شما نمی توانید از تکنیک Escaping/Encoding استفاده کنید چرا که این کار باعث از بین رفتن تگ های معتبر (Valid Tags) می شود. در چنین مواردی باید از یک کتابخانه معتبر و تایید شده برای تجزیه و پاکسازی HTML استفاده کنید.

شما می توانید کتابخانه مورد نظر را با توجه به زبان برنامه نویسی مورد استفاده در توسعه اپلیکیشن انتخاب کنید، برای مثال کتابخانه HtmlSanitizer برای زبان .NET یا SanitizeHelper برای زبان Ruby on Rails گزینه مطلوبی به شمار می رود.

۵- استفاده از HttpOnly flag در کوکی ها :

شما می توانید برای کم اثر کردن شدت حملات XSS از ویژگی HttpOnly flag در کوکی های خود استفاده کنید. در حقیقت با انجام این کار کوکی های HttpOnly flag در سمت کاربر توسط جاوا اسکریپت خوانده نمی شوند و عملا در دسترس نیستند.

۶- استفاده از یک خط مشی امنیتی محتوا (CSP) :

شما همچنین برای کاهش عواقب حملات XSS می توانید از یک خط مشی امنیتی محتوا یا همان CSP استفاده کنید. این قالب امنیتی در واقع یک هدر پاسخ HTTP است و این امکان را در اختیار شما قرار می دهد تا با توجه به سورس ریکوئست، منابع مجاز برای بارگذاری را مشخص کنید.

۷- اسکن مدام صفحات وب :

آسیب پذیری های XSS در برخی اوقات ممکن است توسط برنامه نویسان یا از طریق کتابخانه ها، ماژول ها و نرم افزارهای مربوط به صفحات وب شما مشخص می شوند. بنابراین بهتر است که آسب پذیری صفحات وبسایت خود را با استفاده از اسکنرهایی نظیر Acunetix به طور مداوم اسکن کنید.

آخرین نوشته ها

تماس با ما

  •  کرج، شاهین ویلا، بلوار امام خمینی ، خیابان نهم شرقی ، برج شاهین ،طبقه اول واحد2
  •  91014618
  •   info@shopingserver.net

با تلفن ثابت بدون پیش شماره قابل شماره گیری هست و در صورتی که با تلفن همراه قصد تماس گرفتن دارید از پیش شماره استان خود را اول شماره وارد نمایید.

omid

omid

مطالب مرتبط