آسیب پذیری Cross-site Scripting (XSS)


شرح آسیب پذیری:

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

Stored Cross-site Scripting (XSS)

در این نوع، کد مخرب کاربر (Payload) در سرور وب سایت (در بخش کامنت ها، در بخش پست ها و …) ذخیره شده و با هرباز Load صفحه برای تمامی کاربران اجرا خواهد شد. این خطرناک ترین نوع این آسیب پذیری می باشد. به این نوع Persistent یا Type I هم گفته می شود.

Reflected Cross-site Scripting (XSS)

در این نوع کد مخرب (Payload) در سمت سرور ذخیره نمی گردد و با توجه به مکانی که دارای آسیب پذیری است، یک بار به سمت سرور ارسال شده و در Response کد جاوا اسکریپت به صورت Parse شده اجرا خواهد شد. این آسیب پذیری اغلب در فرم های جستجو، پیغام های خطا و یا هر جایی که ورودی کاربر مستقیما و بدون تغییر در Response نمایش داده می شود وجود دارد. طریقه Exploit نیز معمولا با ارسال یک لینک حاوی Payload به قربانی می باشد که پس از Click روی لینک، کد javaScript مربوطه اجرا خواهد شد.به این نوع Non-Persistent یا Type II نیز گفته می شود.

Dom Based Cross-site Scripting (XSS)

در این نوع، کد مخرب (Payload) هیچ وقت از مرورگر خارج نشده و به سمت سرور ارسال نمی گردد. به طور مثال ممکن است عملیات فورواردینگ توسط قطعه کد document.location.href در جاوا اسکریپت و به وسیله مقدار موجود در URL صورت بگیرد، قطعا تغییر مقدار مربوطه به کد مخرب JavaScript می تواند باعث Exploit این آسیب پذیری از نوع Dom Based گردد. همچنین همین سناریو می تواند مربوط به یکی از Element های کد HTML به کار رفته در صفحه سایت یا فراخوانی یک متد حساس با استفاده از document.write گردد. به این نوع Type-0 هم گفته می شود.

این دسته بندی قدیمی بوده و در دسته بندی جدید OWASP تنها دو نوع از این آسیب پذیری وجود دارد .

Server Cross-site Scripting (XSS)

این نوع زمانی اتفاق می افتد که کدهای مخرب (Payload) مهاجم در کد های HTML ای که سرور به عنوان Response تولید می کند، Include شده باشد. این کدهای مخرب ممکن است از یک محل Stored به سمت سرور ارسال شود یا اینکه از طریق Request توسط کاربر به سمت سرور ارسال شود. به همین دلیل این نوع می تواند هم شامل نوع Stored قدیمی باشد، هم شامل نوع Reflected. در حالت کلی در این نوع آسیب پذیری در کد سمت سرور Exploit می گردد و مرورگر تنها وظیفه Render نمودن Response و اجرای اسکریپت های معتبر Embed شدن در آن را به عهده دارد.

Client Cross-site Scripting (XSS)

این نوع زمانی رخ می دهد که کدهای مخرب ارائه شده توسط مهاجم، با یک فراخوانی نا امن جاوا اسکریپت باعث به روز رسانی DOM گردد. یک فراخوانی جاوا اسکریپت زمانی نا امن به حساب می آید که باعث Inject یک کد جاوا اسکریپت نا امن در DOM گردد. منبع و Source این اسکریپت مخرب می تواند DOM باشد و یا از سمت سرور (با Load صفحه یا با استفاده از Ajax) ارسال گردد. منبع نهایی کد می تواند از سمت یک محل Stored در سمت کلاینت یا سرور باشد یا توسط یک Request از سمت سرور فرستاده شود. به همین دلیل این نوع می تواند هم شامل نوع Stored قدیمی باشد، هم شامل نوع Reflected.

 

چگونه این آسیب پذیری را رفع کنیم ؟

یکی از بهترین راه حل هایی که در این رابطه می توانیم در نظر بگیریم، Encode نمودن کاراکترهای ویژه نظیر کاراکتر های تگ >< و کاراکترهای ” و ‘ در Response های سرور می باشد. برای نوع Client Side نیز اطمینان از Safe بودن API مورد استفاده تا حد بسیار زیادی از Exploit این آسیب پذیری بر روی وب سایت شما جلوگیری می نماید. از دیگر راه حل های مهم در این رابطه می توان به استفاده از HTML Escape و Attribute Escape و JavaScript Escape و CSS Escape در خروجی پاسخ سرور اشاره نمود. همچنین عدم استفاده از URL در جاوا اسکریپت، استفاده از فلگ HTTPOnly Cookie و X-XSS-Protection در Response سرور می تواند تا حد بالایی از بروز این آسیب پذیری جلوگیری نماید.

میلاد خوشدل

در حوزه‌ی امنیت وب و شبکه فعالیت می کند، عاشق پارکور است و مدیریت دیتاسنتر، امن سازی شبکه های مخابراتی و کابلی و برنامه نویسی وب و موبایل از تجارب کاری او می باشد. او در حال حاضر بنیانگذار ریجاکس است.

نظر خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

هفده + نوزده =


تگ های html مجاز به استفاده می باشند: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ارسال یک پیام