حمله تزریق اسکریپت از طریق وبگاه (Cross-Site Scripting) یا همان XSS یکی از حملات متداول هکرها برای مقاصد خرابکارانه در فضای وب به شمار می رود. اگرچه مخفف اصلی این حمله CSS می باشد اما چون با کدهای CSS اشتباه است. برای همین عبارت XSS را برای آن در نظر گرفته اند. امروز قصد داریم به معرفی حملات XSS بپردازیم. نحوه جلوگیری از بروز آن را به شما آموزش دهیم، پس تا انتهای مقاله با ما همراه باشید.
حملات XSS (تزریق اسکریپت بین سایتها) نوعی حمله تزریق کد در سمت کاربر (Client-Side) محسوب میشود. در این نوع حملات، مهاجم تلاش میکند تا کدهای مخرب خود را از طریق یک صفحه وب معتبر در مرورگرهای کاربران اینترنتی اجرا کند. حمله اصلی زمانی رخ میدهد که قربانی از آن صفحه وب یا وباپلیکیشن بازدید نماید.
در واقع، صفحه وب یا وباپلیکیشن به عنوان وسیلهای برای ارسال کدهای مخرب به مرورگر کاربر توسط هکر مورد سوء استفاده قرار میگیرد. به طور کلی، مکانهایی همچون انجمنهای گفتگو، تابلوهای پیامرسانی و صفحات وبی که امکان انتشار نظرات را به کاربران خود میدهند، بهترین وسیله برای تزریق اسکریپتهای مخرب به شمار میروند.
اگر صفحه وب از ورودیهای آلوده کاربران در خروجی تولید شده خود استفاده کند، در برابر حملات XSS آسیبپذیر خواهد شد و ورودی کاربر سپس باید توسط مرورگر قربانی پردازش شود. امکان بروز حملات XSS در زبانهای VBScript، فناوری ActiveX، Flash و حتی CSS وجود دارد. با این حال، بیشترین حملات در زبان جاوااسکریپت رخ میدهد، زیرا این زبان یکی از عناصر اصلی مرورگرهای اینترنتی محسوب میشود.
اگر یک هکر با سوء استفاده از آسیب پذیری XSS موجود در یک صفحه بتواند کدهای جاوا اسکریپت مخرب را در مرورگر کاربر تزریق کند. آنگاه امنیت آن وب اپلیکیشن به همراه کاربرانش به خطر می افتد. حملات XSS برخلاف مشکلات امنیتی، فقط مختص کاربران نیست به گونه ای که اگر برای کاربران وبسایت شما خطرآفرین باشد حتما بر روی خودتان نیز تاثیر می گذارد.
برخی از هکرها نیز به جای هدف قرار دادن کاربران از حملات XSS برای از کار انداختن وبسایت ها استفاده می کنند. در این صورت هکر می تواند برای تغییر محتوای وبسایت یا هدایت مرورگر قربانی به صفحات آلوده استفاده کند.
حملات XSS در مقایسه با تزریق SQL خطر کمتری دارند. تزریق جاوا اسکریپت به یک صفحه وب در نگاه اول ممکن است اصلا خطرناک نباشد. چرا که اکثر مرورگرهای اینترنتی کدهای جاوااسکریپت را در محیطی اجرا می کنند. جاوا اسکریپت نیز محدودیت هایی برای دسترسی به سیستم عامل و فایل های کاربر در نظر دارد. با این حال اگر جاوااسکریپت به عنوان بخشی از یک محتوای مخرب مورد استفاده قرار گیرد بسیار خطرناک خواهد بود :
یک حمله XSS معمولی به دو بخش تقسیم می شود که عبارتند از:
برای اینکه مرحله اول امکان پذیر باشد، وبسایت باید ورودی کاربر را به صورت مستقیم در صفحات خود وارد کند. سپس هکر می تواند رشته مخرب را در صفحه وب وارد کند. این رشته توسط مرورگر کاربر به عنوان سورس کد شناخته می شود. البته در برخی از مواقع نیز هکر با استفاده از مهندسی اجتماعی قربانی را به کلیک بر روی URLهای مخرب ترغیب می کند.
برای اینکه از شر حملات XSS در امان باشید باید ورودی وبسایت خود را سالم نگه دارید. اپلیکیشن شما نیز نباید بدون بررسی دیتای ورودی آن را به صورت مستقیم به مرورگر کاربران ارسال کند. جلوگیری از حملات XSS آسان نیست به گونه ای که تکنیک های مقابله با آن به نوع حمله XSS، بستر استفاده از ورودی کاربر و فریم ورک و زبان برنامه نویسی وبسایت مورد نظر بستگی دارد. با این وجود یکسری اصول کلی و اولیه برای در امان ماندن از حملات XSS وجود دارد که در ادامه آنها را به صورت مختصر توضیح خواهیم داد:
تمام افراد درگیر در پروژه توسعه یک اپلیکیشن یا وبسایت باید از خطرات مربوط به آسیب پذیری XSS آگاه باشند. بنابراین شما باید آموزش های لازم درباره امنیت اپلیکیشن را به تمام برنامه نویسان، کارمندان تضمین کیفیت، تیم دوآپس (DevOps) و ادمین های سیستم ارائه دهید.
تمام ورودی های کاربران را به عنوان ورودی غیر قابل اعتماد در نظر بگیرید. در حقیقت هر ورودی کاربر که به عنوان بخشی از خروجی HTML استفاده شود مستعد حملات XSS می شود. بنابراین با ورودی های معتبر و کاربران داخلی نیز باید همانند ورودی های عمومی رفتار کنید.
با توجه به مکانی که ورودی های کاربران مورد استفاده قرار می گیرد از تکنیک Escaping/Encoding استفاده کنید. برای مثال شما می توانید از کتابخانه های HTML escape، JavaScript escape، CSS escape و URL escape استفاده کنید؛ به عبارت دیگر فقط در صورت نیاز از escapeهای خود استفاده کنید.
در صورتی که ورودی کاربران باید دارای HTML باشد، شما نمی توانید از تکنیک Escaping/Encoding استفاده کنید چرا که این کار باعث از بین رفتن تگ های معتبر (Valid Tags) می شود. در چنین مواردی باید از یک کتابخانه معتبر و تایید شده برای تجزیه و پاکسازی HTML استفاده کنید.
شما می توانید کتابخانه مورد نظر را با توجه به زبان برنامه نویسی مورد استفاده در توسعه اپلیکیشن انتخاب کنید، برای مثال کتابخانه HtmlSanitizer برای زبان .NET یا SanitizeHelper برای زبان Ruby on Rails گزینه مطلوبی به شمار می رود.
شما می توانید برای کم اثر کردن شدت حملات XSS از ویژگی HttpOnly flag در کوکی های خود استفاده کنید. در حقیقت با انجام این کار کوکی های HttpOnly flag در سمت کاربر توسط جاوا اسکریپت خوانده نمی شوند و عملا در دسترس نیستند.
شما همچنین برای کاهش عواقب حملات XSS می توانید از یک خط مشی امنیتی محتوا یا همان CSP استفاده کنید. این قالب امنیتی در واقع یک هدر پاسخ HTTP است و این امکان را در اختیار شما قرار می دهد تا با توجه به سورس ریکوئست، منابع مجاز برای بارگذاری را مشخص کنید.
آسیب پذیری های XSS در برخی اوقات ممکن است توسط برنامه نویسان یا از طریق کتابخانه ها، ماژول ها و نرم افزارهای مربوط به صفحات وب شما مشخص می شوند. بنابراین بهتر است که آسب پذیری صفحات وبسایت خود را با استفاده از اسکنرهایی نظیر Acunetix به طور مداوم اسکن کنید.
شبکه های ارتباطی در طی چند دهه اخیر دچار تحولات بنیادینی شده اند. در آغاز،…
مایکروسافت با انتشار نسخه ی ویندوز سرور 2025، یک بار دیگر ثابت کرده که در…
حملات DDoS (Distributed Denial of Service) یکی از پیچیدهترین و مخربترین تهدیدات سایبری برای وبسایتها…
PyTorch یک چارچوب ماشین لرنیگ اوپن سورس پرکاربرد است که به دلیل سهولت استفاده، نمودار…
اگر شما یک شخص، یک کسب و کار کوچک یا یک شرکت تجاری باشید که…
Ansible برای مدیران سیستم و متخصصان DevOps که می خواهند روند کار IT خود را…