در این مقاله قصد دارم برای شما توضیح دهم که حملات cross site scripting (XSS) چیست؟ و چگونه کار می کند تا بتوانیم اطلاعاتی خوبی از این نوع حمله یادبگیریم؟
حملات cross site scripting (XSS) چیست؟
حملات تزریق کد (cross site scripting) مخفف XSS می باشد ( به دلیل اشتباه نشدن آن با زبان برنامه نویسی CSS آن را XSS قرار داده اند.)
حمله xss یکی از متد های هک از طریق تزریق کد به وب سایت می باشد که هدف آن به دست آوردن اطلاعات کاربرانی است که به سایت مراجعه کرده اند آن سایت است.
انواع حملات XSS کدام است ؟
۱- حملهی Stored XSS یا Persistent و یا Type I
این نوع حمله از بدترین نوع حملات XSS می باشد که هکر کد خود را به صورت دائم در وبسایت قربانی قرار می دهد که بتواند به صورت پایدار از آن استفاده کند مثل وارد کردن کد در قسمت نظرسنجی یا در پست فروم
۲- حملهی Reflected XSS یا Non-Persistent و یا Type II
این نوع حمله، که شایع ترین حمله XSS نیز می باشد، نفوذگر حفره های امنیتی موقتی را در وبسایت پیدا می کند و هدف های خود را پیاده سازی می کند.
به طور مثال اگر سایت قسمت جستوجو آن حفره ای داشته باشد هکر می تواند کد مورد نظر خود را در وارد کند و آدرس صفحهی آسیبپذیر را با استفاده از لینک های کوتاه کننده در اختیار دیگر کاربران قرار دهد.
۳- حملهی DOM Based XSS یا Type-0
XSS مبتنی بر DOM یک نوع پیشرفته از حمله XSS است که امکان دارد نفوذگر اسکریپت های مخرب خود را به همراه داده به سمت Object Model Document (DOM) ارسال کند.سپس داده های خوانده شده توسط برنامه وب به مرورگر منتقل می شود.
روش کار حملات cross site scripting (XSS)
حملات xss به این صورت است که یک لینک توسط هکر ساخته می شود که کدهای مخربی در آن تزریق شده است و به روش های مختلف مثل ایمیل، تبلیغات و … تحویل قربانی داده می شود.
قربانی هنگامی که روی لینک کلیک می کند کد های مخرب اجرا می شود و دسترسی لازم را به هکر می دهد که میتواند اطلاعات مهمی را از سیستم کاربر و کوکی های موجود آن سرقت کند.
کاربران زمانی که در مرورگر خود وارد حسابهای کاربری خود مثل ایمیل، حساب بانکی و اکانت هایی که در سایت های مختلف درست کرده اند می روند این اطلاعات روی کامپیوتر کاربر قسمت کوکی ذخیره می شود و سپس هکر با دسترسی به سیستم کاربر این اطلاعات را سرقت می کند.
چگونه حملات XSS اتفاق می افتد؟
بطور کلی حملات XSS در دو سناریوی زیر اتفاق میافتد:
داده ها از طریق یک درخواست وب، وارد صفحه وبسایت میشوند.
- دادهها در صفحات وب داینامیکی که به سمت مرورگر ارسال میشود وارد میشوند.
- دادهها در صفحات وب داینامیکی که به سمت مرورگر ارسال میشود وارد میشوند.
داده های مخرب اضافه شده معمولا از زبان برنامه نویسی JavaScript استفاده می کنند و بطور کلی هرچیزی که توسط مرورگر اجرا می شود را به عنوان داده ی مخرب می توان استفاده نمود.
اهداف حملات XSS
اهداف حملات XSS به طور کلی شامل موارد زیر است:
- انتقال داده های امنیتی و خصوصی چون کوکی ها
- انتقال کاربر به صفحه ی انتخابی تحت کنترل هکر
- انجام عملیات مخرب در کامپیوتر قربانی از طریق حفره های پیدا شده
حملات XSS چگونه انجام می شود؟
همان طور که گفته شد، ابتدا هکر یک آسیب پذیری بر روی سایت پیدا کرده سپس با وارد کردن کدهای خود آن را Exploit می کند.
نمونه وبسایت ها می توانید در کانال وبسایت مشاهده کنید.
تزریق کد به روش های مختلفی می باشد برای مثال زمانی که کاربر می خواهد نظرات یا کامنت هایی در سمت سرور به وبسایت اضافه کند نمایش کد های Php به صورت زیر است :
echo '<div class="comment-Users">' . $commentBody-Users . '</div>';
متغیر commentBody-Users، کامنتی است که کاربر در سایت نوشته است پس اگر کاربر برای مثال عبارت “مطالب مفیدی بود ممنون” نوشته باشد پس دستور به صورت زیر می شود:
echo '<div class="comment">' . "مطالب مفیدی بود ممنون" . '</div>';
پس کد های HTML سمت مرورگر کاربر به صورت زیر است اما کاربران فقط عبارت “مطالب مفیدی بود ممنون” می بینند :
<div class="comment"> مطالب مفیدی بود ممنون </div>
حال هکر کامنتی همراه با کد Php به صورت زیر می گذارد
هکر <script>alert(“XSS Bug Found”)</script>
چون فیلتری برای این نوع کامنت ها در نظر گرفته نشده است کد های Php استفاده شده در سمت سرور پردازش می شود و به صورت زیر خواهد شد:
echo '<div class="comment">' . ' هکر <script>alert("XSS Bug Found")</script>' . '</div>';
سپس کاربر در مرورگر خود کد زیر را در خروجی مشاهده می کند، با این تفاوت که دستور تگ <script> اجرا می شود در نتیجه کاربر یک پیغام به صورت پاپ آپ حاوی مقدار “XSS Bug Found” را خواهد دید.
و در نتیجه به مرورگر کاربرانی که آن مطلب را مشاهده میکنند کد زیر ارسال خواهد شد:
<div class="comment"> هکر <script>alert("XSS Bug Found")</script></div>
پس باید این دقت را داشته باشید که فیلتر های مناسبی را برای اینطور دستورات قرار دهید تا هکر ها نتوانند از سایت شما سو استفاده کنند و به هدف های مخرب خود برسند.
راه حل های محافظت از حملات XSS چیست؟
۱- استفاده از Escaping
با استفاده از Escaping می توان اطلاعات ورودی به سایت کاربران را سانسور نمود همانند کارکترهای > و < که ممکن است در کد دستورات مورد استفاده قرار بگیرند،حذف می شوند تا دستورات مخربی وارد نشود.
۲- اعتبار سنجی ورودی (Validating Input)
اعتبار سنجی ورودی یعنی اطلاعات ورودی توسط کاربر در جای مربوطه چک می شود که مرتبط باشد برای مثال فیلدی که برای وارد کردن شماره تلفن می باشد کاربر نمی تواند چیز دیگری را دورن آن وارد کند.
۳- استفاده از Content-Security Policy
مرورگرهای به روز امروزی Content-Security Policy را پشتیبانی می کنند که با استفاده از این راه کاربر می تواند اجرای دستورات جاوا اسکریپت را در مرورگر خود مدیریت کند.
۴- استفاده از Sanitize HTML
کتابخانه Sanitize HTML راه حلی است که با کمک آن می توان تگ های موجود در سایت را پاک سازی کرد.برای مثال در زبان برنامه نویسی Php با اجرای تابع strip_tags() مشکل را برطرف کرد.