حمله تزریق کد (XSS) چیست؟
حمله تزریق اسکریپت از طریق وبگاه (Cross Site Scripting) که به صورت مخفف XSS نیز نامیده میشود (مخفف آن درواقع CSS است ولی با زبان طراحی CSS اشتباه گرفته شده و به همین دلیل XSS نامیده میشود)، نوعی از حملات تزریقی است که در وبسایتها پیدا میشود و در بین رایج ترین حملات تحت وب، در جایگاه اول قرار دارد.
این حمله طی آسیب پذیریای صورت میگیرد که در آن دادههای وارد شده توسط حمله کننده یا هکر، بدون فیلتر شدن تحویل کاربران داده میشود. این دادهها میتوانند کدهای جاوا اسکریپتی باشند که در سمت مرورگر کاربر اجرا شده و کارهای مختلفی میتواند برای هکر انجام دهد.
چگونه از باگ XSS جلوگیری کنیم؟
نحوه جلوگیری از باگ XSS نیاز به آگاهی برنامه نویس تحت وب از سناریوهای گوناگونی است که ممکن است طی آنها، حمله کننده باگ XSS را شناسایی کرده و اقدام به اکسپلویت کردن آن نماید. به همین دلیل یک پست جداگانه با عنوان نحوه جلوگیری از باگ Cross Site Scripting یا همان XSS منتشر کرده ایم که در آن موارد حساس به باگ XSS را بررسی کرده ایم. برای جلوگیری از باگ، به پست زیر مراجعه کنید:
اصلاح و جلوگیری از باگ تزریق کد (XSS)
چرا حملات XSS خطرناک هستند؟
حملات تزریق کد یا جاوا اسکریپت (Javascript)، به دلایل مختلفی خطرناک هستند. ازجمله:
دزدیدن کوکیها:
هکر میتواند بسیار ساده، کوکیهای مرورگر کاربر را بدزدد. از آنجایی که در کوکیها اطلاعاتی نظیر شناساگر نشست (Session) فعالِ مثلاً حساب کاربری فرد نوشته شده است، هکر میتواند با استفاده از این کوکیها و بدون وارد کردن حتی یک کاراکتر رمز، وارد حساب شما شود. البته اگر کوکیهای حساس از طرف سایت اصلی به عنوان امن به مرورگر معرفی شوند، این کوکیها به دست هکر نخواهد افتاد (حداقل با روشهای عادی).
دزدیدن اطلاعاتی مثل رمز عبور:
اگر باگ کراس سایت اسکریپتینگ در صفحات حساسی مثل صفحه لاگین، جایی که ما رمز عبور خود را وارد میکنیم باشد، هکر به سادگی میتواند فیلد وارد کردن رمز عبور را مانیتور کرده و با هر بار تغییر مقدار، مقدار داخل آن را به سرور هکر بازگرداند و در نتیجه هکر اطلاعات بسیار حساس مثل نام کاربری و رمز عبور فرد را در دست داشته باشد.
ارسال درخواستهای جعلی:
هکر میتواند با تزریق کدی، درخواستهای تقلبی را از مرورگر کاربر رد و بدل کند. در این صورت مرورگر کاربر را مانند یک سرور پراکسی در دست گرفته و به راحتی میتواند خود را پشت آن مخفی کند. همچنین میتواند از این طریق اقدام به DDoS کردن سرویسهای گوناگون کند.
مدیریت کل محتوای HTML صفحه:
هکر با استفاده از حملات تحت DOM میتواند محتوای صفحه را تغییر دهد. این کار بخصوص در مباحث مربوط به مهندسی اجتماعی بسیار خطرناک است. یا مثلاً میتواند از طریق API کدهایی نظیر زبان HTML5 استفاده کرده و کارهایی از قبیل شنود میکروفون، مشاهده وبکم، ردگیری مکان و … انجام دهد. البته همه این کارها به دانش مهندسی اجتماعی هکر نیاز دارد.
حملات XSS چگونه انجام میپذیرند؟
همانطور که گفته شد، ابتدا حمله کننده یک باگ یا آسیب پذیری بر روی یک سایت پیدا کرده سپس با تزریق کدهای خود آن را اکسپلویت میکند. تزریق کد میتواند به روشهای گوناگونی انجام بپذیرد.
مثلاً فرض کنید یک سایت قابلیت اضافه نموند محتوایی توسط کاربران را به یک صفحه میدهد، مثل قسمت نظرات یا کامنتهای یک مطلب. در سمت سرور، نحوه نمایش کامنتها مثلاً به صورت زیر است (کدها در زبان PHP هستند):
echo ‘
‘;
با فرض اینکه در متغیر commentBody، کامنتی که کاربران گذاشته اند قرار گرفته، درصورتی که یک کاربر نظری مثل متن زیر را بگذارد:
با تشکر از مطالب مفیدتون
کد تغییر یافته اینچنین خواهد شد:
echo ‘
‘;
در نتیجه کدهای HTML زیر به مرورگر کاربر تحویل داده خواهد شد:
و کاربرانی که آن مطلب را مشاهده میکنند، قادر خواهند بود تا کامنتی با محتوای “با تشکر از مطالب مفیدتون” را ببینند.
تزریق کد XSS
حال فرض کنید کاربر دیگر (در اینجا، حمله کننده) کامنتی با محتوای زیر را ارسال کند:
عالی بود
چون در کدهای PHP گذاشته شده، هیچ فیلتری بر روی خروجی اعمال نمیشود، در سمت سرور پردازش به این صورت خواهد بود:
echo ‘
‘;
و در نتیجه به مرورگر کاربرانی که آن مطلب را مشاهده میکنند کد زیر ارسال خواهد شد:
و کاربر محتوای “عالی بود” را مشاهده خواهد کرد با این تفاوت که چون یک تگ
تزریق کد XSS
ممکن است بگوئید که خب میشود با فیلتر کردن تگ
با رفتن به مسیر بالا، متوجه خواهیم شد که کدهای زیر به مرورگر کاربر تحویل داده خواهند شد:
متن جستجوی شما:
با اینحال چون خروجی توسط کدهای سایت فیلتر نشده است و