حملات XSS یا Cross site Scripting چیست؟ چگونه از این حملات جلوگیری کنیم؟
در این مقاله به معرفی یکی از حملات نفوذ هکرها با تزریق کدهای جاوا اسکریپت یعنی Cross-site scripting می پردازیم. در این حملات هکرها اطلاعات کاربران سایت را به سرقت می برند.
یکی از حملات امنیتی سایت ها، حمله XSS یا Cross site Scripting توسط هکرهاست. در حملات XSS هکرها اطلاعات کاربران را با تزریق کدهای اسکریپت به سرقت می برند. علاوه بر اطلاعات کاربران، در حملات Cross site Scripting اطلاعات وب سایت ها نیز به خطر خواهد افتاد. در این مقاله به تعریفی از اینکه حملات XSS چیست، انواع حملات Xss و روش های جلوگیری از این حملات خواهیم پرداخت.
حملات XSS چیست؟
Cross site Scripting که با نام XSS هم شناخته می شود یک آسیب امنیتی در وب سایتهاست که به مهاجم اجازه می دهد تا با تزریق کدهای جاوا اسکریپت در سایت، تعاملات کاربران با یک وب سایت را به خطر بیاندازد. حملات XSS در VBScript، ActiveX، Flash و حتی CSS هم امکان پذیرند. با این حال، بیشتر در جاوا اسکریپت رایج هستند.
حمله XSS، شباهت زیادی با حمله SQL Injection دارد. حمله XSS به مهاجم این امکان را میدهند تا خود را به عنوان یک کاربر قربانی درآورد، هر اقدامی را که کاربر قادر به انجام آن است انجام دهد و به هر یک از دادههای کاربر دسترسی پیدا کند. اگر کاربر قربانی دسترسی خاصی به داخل برنامه داشته باشد، ممکن است مهاجم بتواند کنترل کاملی بر تمام عملکردها و داده های برنامه داشته باشد.
تفاوت اصلی حملات XSS با بقیه حملات این است که هدف حمله، اطلاعات کاربران یک وبسایت است. این اطلاعات می تواند نام و رمز های عبور و اطلاعات حساب های بانکی باشد. برای مثل اگر کاربر در یکی از سایت ها موردحمله قرار گرفته و صفحه خاصی را باز کند یا بر لینک پنهانی کلیک کند، کدی بر روی کامپیوتر شخص اجرا خواهد شد و اطلاعات و رمزها و ایمیل ها از سیستم کاربر به سرقت خواهد رفت.
نکته: CSS مخفف عبارت Cross site Scripting است. اما از آنجایی که ما CSS را مخفف Cascading Style Sheets در نظر می گیریم از XSS استفاده می کنیم.
انواع حملات XSS چیست؟
پس از این که تعریف حملات XSS چیست؟ را بیان کردیم بابد با انواع آسیب پذیری XSS آشنا شویم. سه نوع اصلی از حملات XSS وجود دارد:
حملات Reflected XSS: حملاتی که اسکریپت مخرب از درخواست فعلی HTTP می آید.
حملات Stored XSS: حملاتی که اسکریپت مخرب از پایگاه داده وب سایت می آید.
DOM Based XSS: حملات مبتنی بر DOM، که در آن آسیبپذیری در کد سمت کلاینت به جای کد سمت سرور بوجود می آید.
Reflected XSS
حملات منعکس شده یا بازتابی ساده ترین نوع اسکریپت نویسی بین سایت هاست. این حملات زمانی ایجاد میشود که کدهای مخرب، اطلاعات کاربران را در یک درخواست HTTP دریافت میکند. در اینجا یک مثال ساده از آسیب پذیری XSS منعکس شده نمایش داده شده است:
https://insecure-website.com/status?message=All+is+well.
<p>Status: All is well.</p>
اگر کاربر از یک URL امن استفاده کند پاسخی مانند بالا دریافت خواهد کرد. اما یک مهاجم با ورود کدهای جاوا اسکریپت به راحتی می تواند حمله ای مانند زیر ایجاد کند:
<https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
<p>Status: <script>/* Bad stuff here... */</script></p>
اگر کاربر از URL ساخته شده توسط مهاجم بازدید کند، اسکریپت مهاجم در مرورگر کاربر، اجرا می شود. در آن مرحله، اسکریپت می تواند هر عملی را انجام دهد و هر داده ای را که کاربر به آن دسترسی دارد، بازیابی و سرقت کند.
Stored cross-site scripting
یکی دیگر از انواع حملات Xss، حملات ذخیره شده یا ماندگار زمانی ایجاد می شود که کاربر داده ها را از یک منبع نامعتبر دریافت می کند. به عنوان مثال، اسکریپتهای مخرب در پست وبلاگ، فیلدها، جزئیات تماس در مورد سفارش مشتری و… از منابع غیرقابل اعتماد به دست کاربر می رسند.
در اینجا یک مثال ساده از آسیب پذیری XSS نمایش داده شده است. یک برنامه پیام رسان به کاربران امکان می دهد پیام هایی را ارسال کنند که برای سایر کاربران نمایش داده می شود:
<p>Hello, this is my message!</p>
اکنون یک مهاجم می تواند به راحتی با کدهای اسکریپت پیامی ارسال کند که به سایر کاربران حمله می کند:
<p><script>/* Bad stuff here... */</script></p>
DOM-based cross-site scripting
XSS مبتنی بر DOM (به عنوان DOM XSS شناخته میشود) زمانی ایجاد میشود که یک برنامه کاربردی حاوی جاوا اسکریپت سمت سرویس گیرنده (کلاینت) باشد و دادهها را از یک منبع نامعتبر به روشی ناامن پردازش میکند.
در مثال زیر، یک برنامه کاربردی از کدهای جاوا اسکریپت برای خواندن مقدار از یک فیلد ورودی و نوشتن آن مقدار در یک عنصر در HTML استفاده می کند:
var search = document.getElementById(‘search’).value;
var results = document.getElementById(‘results’);
results.innerHTML = ‘You searched for: ‘ + search;
اگر مهاجم بتواند مقدار فیلد ورودی را کنترل کند، میتواند به راحتی یک مقدار مخرب بسازد که باعث میشود بجای کد بالا اسکریپت خودش اجرا شود:
You searched for: <img src=1 onerror='/* Bad stuff here... */'>
در این نمونه حمله XSS مهاجم با استفاده از یک URL مخرب، به همان روش حمله XSS منعکس شده، حمله را انجام می دهد.
حملات XSS برای چه چیزی می تواند استفاده شود؟
تأثیر واقعی یک حمله XSS به طور کلی به ماهیت سایت ها، مرورگرها، عملکرد و داده های آن و وضعیت کاربر در معرض خطر بستگی دارد. مثلا:
در یک برنامه که در آن همه کاربران ناشناس هستند و همه اطلاعات عمومی هستند، تأثیر منفی آنها حداقل خواهد بود. در برنامهای که دادههای حساسی مانند تراکنشهای بانکی، ایمیلها یا سوابق مراقبتهای بهداشتی را در خود نگهداری میکند، معمولاً تأثیر آن جدی است. مهاجمی که از یک آسیبپذیری اسکریپت بین سایتی سوء استفاده میکند، معمولاً میتواند:
- به عنوان کاربر قربانی جعل هویت یا خودنمایی کند.
- هر عملی را که کاربر قادر به انجام آن است انجام دهید.
- هر داده ای را که کاربر می تواند به آن دسترسی داشته باشد را بخواند.
- اطلاعات ورود کاربر را ضبط کنید.
- تخریب وب سایت را انجام دهید.
- قابلیت های تروجان را به وب سایت تزریق کنید.
چگونه آسیب پذیری های XSS را پیدا کنیم؟
پیدا کردن حملات منعکس شده و حملات ذخیره شده به اینصورت است که با ارسال یک ورودی منحصر به فرد ساده (مانند یک رشته الفبای عددی کوتاه) در هر نقطه ورودی، در هر مکانی که ورودی ارسال شده در پاسخهای HTTP برگردانده میشود را به صورت جداگانه آزمایش میکند. سپس بررسی می شود که آیا می توان از ورودی ساخته شده برای اجرای کدهای جاوا اسکریپت دلخواه استفاده کرد؟ به این ترتیب، زمینه ای را که XSS در آن می تواند رخ دهد تعیین می شود.
آزمایش دستی XSS مبتنی بر DOM که از پارامترهای URL ناشی میشود، شامل فرآیند مشابهی است: 1. قرار دادن چند ورودی ساده و منحصر به فرد 2.استفاده از ابزارهای توسعهدهنده مرورگر برای جستجوی DOM برای این ورودی ها و 3. آزمایش هر مکان برای تعیین اینکه آیا می تواند مورد حمله قرار گیرد یا خیر.
چگونه از حملات XSS جلوگیری کنیم؟
به طور کلی، پیشگیری موثر از آسیبپذیریهای XSS احتمالاً شامل ترکیبی از اقدامات زیر است:
استفاده از مرورگرهای ایمن و به روز
به دلایل زیادی از جمله رفع اشکالات، بهبود عملکرد، نصب ویژگی های جدید و اصلاح آسیب پذیری های امنیتی، مرورگرها همیشه باید به روز نگه داشته شود. بهروزرسانی منظم آسیبپذیریها را تا حد زیادی کاهش میدهد.
پاکسازی و اعتبارسنجی فیلدهای ورودی
فیلدهای ورودی رایج ترین نقطه ورود برای اسکریپت های حمله XSS هستند. بنابراین، همیشه باید هر گونه اطلاعات ورودی را بررسی کنید. اعتبارسنجی باید در سمت سرویس گیرنده و سمت سرور به عنوان یک اقدام احتیاطی اضافی انجام شود.
فایروال برنامه های وب
فایروال برنامه وب (WAF) می تواند ابزار قدرتمندی برای محافظت در برابر حملات XSS باشد. WAF ها می توانند ربات ها و سایر فعالیت های مخربی را که ممکن است نشان دهنده حمله باشد را فیلتر کنند. حملات را می توان قبل از اجرای هر اسکریپت مسدود کرد.
سیاست امنیت محتوا
یک خط مشی امنیت محتوا (CSP) می تواند عملکردهایی را که برای یک وب سایت لازم است را تعریف کند. می توان از آنها برای جلوگیری از پذیرش هرگونه اسکریپت توسط وب سایت استفاده کرد. این روش حملات XSS را کاملاً مسدود کند یا احتمال آنها را تا حد زیادی کاهش دهد. برای اینکار می توان از ابزارهای NoScript نیز استفاده کرد.
استفاده از پلاگین های امنیتی
در سایت های وردپرسی نصب یک افزونه امنیتی وردپرس در جلوگیری از حملات xss بسیار موثر است. افزونه امنیتی وبسایت شما را اسکن می کند و از وروی های مخرب جلوگیری می کند.
اصول امنیت سایت را از 0 یاد بگیرید
بهتر است کامل به آموزش افزایش امنیت وردپرس بپردازید، بحث امنیت بسیار طولانی و پیچیده است به همین دلیل باید نکانت امنیتی را کامل بدانید تا بتوانید به صورت کامل از سایتتان در برابر حملات احتمالی محافظت کنید، اما لازم نیست نگران باشید چرا مجموعه راست چین آکادمی در دوره امنیت وردپرس به صورت کامل به مبحث امنیت پرداخته است که میتوانید تمام استفاده را از این دوره ببرید.
در این مقاله به موضوع حملات XSS چیست؟ پرداختیم و انواع حملات Xss را توضیح دادیم. برای جلوگیری از این حملات Cross site Scripting، از مرورگرهای معتبر استفاده کنید و از کلیک بر روی لینک های ناشناس و فایل های ناشناخته جلوگیری کنید. از آنجایی که هدف این حملات اطلاعات کاربران هستند، آیا شما تا بحال با این نوع حملات برخورد داشته اید؟ تجربیات خود را با ما در میان بگذارید.