اسکریپت بین سایتی چیست؟ Cross-site Scripting یا XSS یک مشکل امنیتی تحت وب است که مجرمان سایبری اسکریپت های مخرب را در وب سایت های قانونی یا قابلاعتماد اجرا میکنند. در حمله XSS، مهاجم از صفحات وب یا برنامههای کاربردی وب برای ارسال کدهای مخرب و به خطر انداختن تعاملات کاربران با یک برنامه آسیبپذیر استفاده میکند. این نوع حملات معمولاً درنتیجه نقصهای رایج در یک برنامه وب رخ میدهند و یک بازیگر بد را قادر میسازد تا هویت جعلی یک کاربر را بپذیرد، هر اقدامی را که کاربر بهطورمعمول انجام میدهد انجام دهد و به همه دادههای آنها دسترسی داشته باشد. بهعنوانمثال، اگر کاربری دسترسی سطح بالایی به برنامه یک سازمان داشته باشد، مهاجم ممکن است بتواند کنترل کامل دادهها و عملکرد آن را در دست بگیرد.
اسکریپت مخربی که از یک آسیبپذیری در یک برنامه سوءاستفاده میکند، اطمینان میدهد که مرورگر کاربر نمیتواند تشخیص دهد که از یک منبع نامعتبر آمده است. درنتیجه، مهاجم میتواند به کوکیها، tokenهای جلسه و هر داده حساس دیگری که مرورگر جمعآوری میکند دسترسی داشته باشد یا حتی محتوای زبان نشانهگذاری فرمانها یا HTML را در صفحه بازنویسی کند. وبسایت یا برنامهای که اسکریپت را به مرورگر کاربر تحویل میدهد، درواقع وسیلهای برای مهاجم است. اهداف محبوب برای حملات XSS شامل هر سایتی است که نظرات کاربران را فعال میکند، مانند انجمنهای آنلاین و بوردهای پیام.
اسکریپت بین سایتی چیست و XSS چگونه کار میکند؟
XSS با سوءاستفاده از یک آسیبپذیری در یک وبسایت کار میکند که منجر به بازگشت کدهای مخرب جاوا اسکریپت هنگام بازدید کاربران میشود. اجرای کد مخرب در داخل مرورگر کاربر رخ میدهد و مهاجم را قادر میسازد تا تعامل قربانی با سایت را دچار مشکل کند. هر صفحه وب یا برنامه وب که ورودی نادرست کاربر را فعال میکند در برابر حمله XSS آسیبپذیر است. حملات XSS میتوانند در زبانهای برنامهنویسی و چارچوبهای نرمافزاری مختلف، ازجمله اسکریپت ویژوال بیسیک مایکروسافت یا VBScript و ActiveX، Adobe Flash و cascading style sheets یا CSS رخ دهند. با این حال، آنها بیشتر در جاوا اسکریپت رخ میدهند، که رایجترین زبان برنامهنویسی مورداستفاده در مرور وب است.
بیشتر بخوانید: ارائه CSP Evaluator توسط شرکت گوگل برای مقابله با XSS
یک حمله XSS معمولاً از دو مرحله تشکیلشده است. روش اول روشی است که آنها برای INJECT کد مخرب، که بهعنوان Payload نیز شناخته میشود، به صفحه وب که قربانی بازدید میکند، استفاده میکنند. این تنها در صورتی امکانپذیر است که وبسایت هدف مستقیماً اجازه ورود کاربر را به صفحات خود بدهد. در این صورت، مهاجم کد مخرب را به صفحه INJECT میکند، که پس از بازدید کاربر از سایت کاربر، بهعنوان کد منبع در نظر گرفته میشود.
مرحله دوم این است که قربانی به وبسایت موردنظری که INJECT شده است مراجعه کند. برای دستیابی به این هدف، مهاجمان اغلب از فنهای Social Engineering استفاده میکنند یا یک حمله فیشینگ را برای ارسال قربانیان به وبسایت مخرب انجام میدهند.
مهاجمان با جاوا اسکریپت چه کاری می توانند انجام دهند؟
جاوا اسکریپت معمولاً در محیطهای کاملاً کنترلشده در اکثر مرورگرهای وب استفاده میشود و معمولاً سطوح دسترسی محدودی به فایل ها یا سیستم عامل های کاربران دارد. در نتیجه، این تصور رایج وجود دارد که آسیبپذیریهای XSS نسبت به سایر حملات Injection، مانند Structured Query Language یا SQL ، یک تکنیک رایج که میتواند پایگاههای اطلاعاتی را از بین ببرد، تهدیدی کمتری در نظر گرفته می شوند. با این حال، مهاجمان میتوانند از جاوا اسکریپت برای تأثیرگذاری خطرناک در محتوای مخرب سوء استفاده کنند.
عبارتند از مثال های زیر:
1. جاوا اسکریپت مخرب میتواند به هر شی ای که یک صفحه وب به آن دسترسی دارد، مانند کوکیها و نشانه token های جلسه، دسترسی داشته باشد. با به دست آوردن یک کوکی جلسه، مهاجم میتواند هویت یک کاربر را جعل کند، اقداماتی را انجام دهد و درعینحال خود را بهعنوان یک کاربر پنهان کند و به دادههای حساس آنها دسترسی پیدا کند.
2. جاوا اسکریپت میتواند Document Object Model یا DOM مرورگر را بخواند و تغییر دهد، اما فقط در صفحهای که در آن اجرا میشود.
3. از جاوا اسکریپت میتوان برای ارسال درخواستهای پروتکل انتقال ابرمتن یا HTTP از طریق XMLHttpRequest استفاده کرد که برای تبادل داده با یک سرور استفاده میشود.
4. جاوا اسکریپت به رابطهای برنامهنویسی برنامه HTML 5 ، API دسترسی دارد. این بدان معناست که به فایل های کاربر، موقعیت جغرافیایی، میکروفون و وب کم دسترسی دارد.
بیشتر بخوانید: کاربرد AssemblyScript در حوزه برنامه نویسی
با ترکیب این اطلاعات با فنهای مهندسی اجتماعی، مجرمان سایبری میتوانند از سوءاستفادههای جاوا اسکریپت برای ایجاد حملات پیشرفته از طریق سرقت کوکی، سرقت هویت، keylogging، فیشینگ و تروجانها استفاده کنند. بنابراین حملات XSS میتواند زمینههایی را برای هکرها فراهم کند تا حملات سایبری بزرگتر و پیشرفتهتری را انجام دهند.
انواع حملات اسکریپت بین سایتی چیست؟
انواع مختلفی از حملات XSS وجود دارد که هکرها میتوانند از آنها برای سوءاستفاده از آسیبپذیریهای وب استفاده کنند. برخی از محبوبترین آنها عبارتاند از XSS منعکسشده، XSS ذخیرهشده و XSS مبتنی بر DOM.
1. XSS منعکسشده یا اسکریپت بین سایتی
XSS منعکسشده که به نام XSS غیر پایدار نیز شناخته میشود، رایجترین و سادهترین شکل حمله XSS است. PAYLOAD هکر باید در یک درخواست ارسالشده به سرور وب گنجانده شود و سپس در پاسخ HTTP گنجانده شود. این روش توسط مهاجمان استفاده میشود تا قربانیان را با ارسال لینکهای مخرب و ایمیلهای فیشینگ به سرورها در دام بیندازد.
Reflected XSS یکشکل غیر مداوم از حمله است، به این معنی که مهاجم مسئول ارسال PAYLOAD به قربانیان است و معمولاً از طریق رسانههای اجتماعی یا ایمیل ارسال میشود.
2. XSS ذخیرهشده
XSS ذخیرهشده یا XSS مداوم، معمولاً روش حمله آسیبرسان به XSS است. مهاجم از این رویکرد برای INJECT بار یا همان PAYLOAD به برنامه هدف استفاده میکند. برنامه دارای input اعتبار سنجی ندارند، سپس کد مخرب بهطور دائم توسط برنامه در مکانی مانند پایگاه داده ذخیره میشود یا در آنجا باقی میماند. در عمل، این مهاجم را قادر میسازد تا یک اسکریپت مخرب را در قسمتهای input کاربر، مانند بخشهای نظر دهی در یک وبلاگ یا پست انجمن وارد کند.
PAYLOAD مهاجم هنگام باز کردن صفحه آلوده به مرورگر کاربر ارائه میشود، به همان شکلی که یک نظر قانونی در مرورگر آنها ظاهر میشود. قربانیان هنگام مشاهده صفحه در مرورگر خود سهوا اسکریپت مخرب را اجرا میکنند.
3. XSS مبتنی بر DOM
XSS مبتنی بر DOM شکل پیشرفتهتری از حمله XSS است که تنها در صورتی امکانپذیر است که برنامه وب دادههایی را که کاربر در اختیار DOM قرار میدهد بنویسد. سپس این دادهها توسط برنامه خوانده میشود و به مرورگر کاربر ارسال میشود. اگر دادهها بهدرستی مدیریت نشود، مهاجم میتواند PAYLOAD خود را INJECT کند. محموله درون DOM ذخیره میشود و تنها زمانی اجرا میشود که دادهها از DOM خوانده شوند. این حملات XSS معمولاً سمت کاربر هستند و PAYLOAD به سرور ارسال نمیشود، که تشخیص آن را از طریق فایروالها و گزارشهای سرور دشوارتر میکند. اشیاء DOM دستکاریشده شامل مکانیاب با منبع یکسان URL یا آدرسهای وب و همچنین بخشهای Anchor و ارجاع URL هستند.
نحوه یافتن آسیبپذیریهای XSS
یافتن آسیبپذیریهای XSS کار آسانی نیست. آنها اغلب به نوع آسیبپذیری XSS، ورودی کاربر مورد سوءاستفاده قرارگرفته و چارچوب برنامهنویسی یا زبان برنامهنویسی درگیر در آن وابسته هستند. بااینحال، اکثر آسیبپذیریهای XSS را میتوان از طریق یک اسکنر آسیبپذیری وب کشف کرد.
آسیبپذیریهای XSS میتوانند بهراحتی در هر زمان توسط توسعهدهندگان یا با افزودن کتابخانهها، ماژولها یا نرمافزارهای جدید معرفی شوند. اسکن منظم برنامههای کاربردی وب برای ناهنجاریها، فعالیتهای غیرمعمول یا آسیبپذیریهای احتمالی مهم است.
چگونه از آسیبپذیریهای XSS جلوگیری کنیم
برخی از اصول کلی وجود دارد که میتواند وبسایتها و برنامههای وب را برای کاربران ایمن نگه دارد.
1. آگاهی از ریسک: برای همه کاربران بسیار مهم است که از خطراتی که بهصورت آنلاین با آنها روبرو هستند آگاه باشند و تاکتیکهایی را که مهاجمان برای سوءاستفاده از آسیبپذیریها استفاده میکنند، درک کنند. سازمانها باید اطمینان حاصل کنند که کارکنانشان با ارائه آموزشهای امنیتی منظم از این موضوع آگاه هستند تا آنها را در جریان آخرین خطرات آنلاین قرار دهند.
2. به هیچ INPUT کاربری اعتماد نکنید: برخورد با تمام ورودیهای کاربری بهگونهای که گویی غیرقابلاعتماد است، بهترین راه برای جلوگیری از آسیبپذیریهای XSS است. هر INPUT کاربر که از طریق درگاه HTML معرفی شود، خطر حمله XSS را به همراه دارد، بنابراین با INPUT همه کاربران احراز هویت شده یا داخلی طوری رفتار کنید که گویی از کاربران عمومی ناشناس هستند.
3. از Escape و Encoding استفاده کنید: Escape و Encoding تدابیر امنیتی دفاعی هستند که به سازمانها اجازه میدهند از حملات INJECTION جلوگیری کنند. آنها برای تمام فنهای برنامهنویسی و اسکریپت نویسی، مانند CSS escape، HTML escape، JavaScript escape و URL Escape در دسترس هستند. تا جایی که امکان دارد از این کتابخانهها استفاده کنید و از نوشتن فنهای سفارشی خودداری کنید مگر اینکه کاملاً ضروری باشد.
4. از پاک کننده های HTML استفاده کنید: ورودی کاربر که باید حاوی HTML باشد را نمیتوان کنار گذاشته یا کدگذاری کرد زیرا باعث شکستن tagهای اعتبار میشود. در این رویداد، استفاده از یک پاککننده مناسب و قابلاعتماد برای تمیز کردن و تجزیه HTML مهم است.
5. تنظیم HttpOnly: تنظیم پرچم HttpOnly برای کوکیها به کاهش اثرات آسیبپذیری احتمالی XSS کمک میکند. انجام این کار به این معنی است که کوکیها از طریق جاوا اسکریپت سمت سرویس کاربر قابلدسترسی نیستند.
6. استفاده از POLICY امنیت محتوا با CSP :CSP یک هدر پاسخ در HTTP است که به کاربران امکان میدهد منابع پویا را که میتوانند بر اساس منبع درخواست بارگذاری شوند، اعلام کنند. این همچنین میتواند به کاهش عواقب در صورت آسیبپذیری XSS کمک کند.