
آموزش مقابله با حملات Cross Site Scripting (XSS) در ASP.NET Core
آموزش مقابله با حملات Cross Site Scripting (XSS) در ASP.NET Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی، محافظت از اپلیکیشن های ASP.NET Core در مقابل حملات Cross Site Scripting (XSS) است که با نام اصلی Cross Site Scripting (XSS) Prevention for ASP.NET Core 3 and ASP.NET 4 Applications از شرکت Pluralsight منتشر شده است.
حملات Cross Site Scripting و یا XSS در Web Application ها
یکی از انواع حملاتی که در web application ها اتفاق می افتد حملات cross site scripting می باشد که به صورت کوتاه به آنها XSS نیز می گوییم. حملات XSS یک نوع از حملات تزریق و یا injection است که در آنها اسکریپت ها و یا دستورات مخرب درون وب سایت های معتبر و قابل اعتماد تزریق می گردد. حملات XSS زمانی رخ می دهند که یک هکر تلاش می کند که داده ها و کدهای مخربی را به درون یک web application سالم ارسال کند. اینگونه از داده ها اغلب در قالب side script های مرورگر به web application قربانی ارسال می گردد. یکی از مهم ترین عواملی که یک web application را در برابر حملات XSS تضعیف می کند، دریافت ورودی از کاربر بدون اعتبارسنجی کردن و یا validate نمودن آن می باشد.

علاوه بر این encode کردن ورودی های دریافت شده توسط کاربر نیز می توانند به منظور جلوگیری از حملات XSS مورد استفاده قرار بگیرد. در حملات XSS یک هکر اقدام به ارسال کردن اسکریپت های مخرب به کاربر می کند. کاربر نهایی و مرورگر وی به هیچ وجه نمی داند که این اسکریپت ارسال شده نباید مورد اعتماد قرار بگیرد. بنابراین به سادگی اقدام به اجرا کردن آن اسکریپت می کند. دلیل این موضوع این است که مرورگر به اشتباه فکر می کند که این اسکریپت از یک منبع قابل اعتماد و یا اصطلاحاً trusted source دریافت شده است. این اسکریپت های مخرب به سادگی می توانند به کوکی ها و session token ها و دیگر داده های حساس که توسط مرورگر ذخیره شده اند دسترسی پیدا کنند. این اسکریپت ها حتی می توانند محتوای page های HTML را نیز کاملاً رونویسی کرده و آنها را تغییر بدهند.
انواع حملات XSS و روش ورود کد مخرب به صفحات وب
حمله Cross-Site Scripting زمانی اتفاق میافتد که برنامه وب، محتوای کنترلشده توسط مهاجم را به شکلی ناامن در صفحهای نمایش دهد که مرورگر آن را اجرا کند. در این شرایط، اسکریپت ممکن است در زمینه امنیتی همان وبسایت اجرا شود و به دادهها یا قابلیتهایی دسترسی پیدا کند که در اختیار صفحه قرار دارند. این مشکل میتواند از نحوه پردازش ورودی کاربران، ذخیرهسازی محتوای ناامن یا نمایش دادهها در بخشهای مختلف رابط کاربری ناشی شود.
حملات XSS معمولاً در سه دسته اصلی بررسی میشوند: Reflected XSS، Stored XSS و DOM-based XSS. در نوع Reflected، ورودی مخرب در پاسخ همان درخواست بازتاب پیدا میکند. در نوع Stored، محتوای مخرب در سیستم ذخیره میشود و ممکن است هنگام مشاهده صفحه توسط کاربران دیگر اجرا شود. در نوع DOM-based، نحوه پردازش دادهها در کد سمت مرورگر زمینه اجرای اسکریپت ناخواسته را فراهم میکند. شناخت تفاوت این الگوها به انتخاب روش پیشگیری مناسب کمک میکند.
روشهای جلوگیری از XSS در ASP.NET Core
یکی از اصول مهم پیشگیری از XSS، نمایش امن دادههای غیرقابل اعتماد در خروجی HTML است. در ASP.NET Core، استفاده درست از قابلیتهای رمزگذاری خروجی و پرهیز از وارد کردن مستقیم دادههای کاربر در بخشهای اجرایی صفحه اهمیت دارد. برای مثال، اگر کاربر متنی شامل نشانههای HTML وارد کند، برنامه باید آن را مطابق زمینه نمایش بهصورت امن پردازش کند تا مرورگر آن را بهعنوان کد اجرایی تفسیر نکند. البته روش مناسب به محل استفاده داده، مانند متن HTML یا ویژگی یک عنصر، بستگی دارد.

علاوه بر رمزگذاری خروجی، باید از الگوهایی که دادههای کاربر را مستقیماً وارد JavaScript یا HTML میکنند، با دقت استفاده کرد. در صورت نیاز به نمایش محتوای HTML تولیدشده توسط کاربران، رمزگذاری ساده ممکن است با نیاز برنامه سازگار نباشد و پاکسازی محتوا با یک راهکار معتبر نیز لازم شود. همچنین استفاده از Content Security Policy میتواند بهعنوان یک لایه دفاعی مکمل عمل کند، اما جایگزین اصلاح کد ناامن نیست. ترکیب این روشها احتمال اجرای اسکریپتهای مخرب را کاهش میدهد.
تفاوت رمزگذاری خروجی و اعتبارسنجی ورودی در مقابله با XSS
اعتبارسنجی ورودی به برنامه کمک میکند دادههای دریافتی را از نظر قالب و قواعد مورد انتظار بررسی کند. برای نمونه، اگر یک فیلد باید شامل تاریخ یا عدد باشد، برنامه میتواند ورودیهایی را که با این قالب سازگار نیستند رد کند. بااینحال، اعتبارسنجی بهتنهایی برای جلوگیری از XSS کافی نیست، زیرا متنهای ظاهراً معتبر نیز ممکن است هنگام نمایش در یک زمینه نامناسب خطرناک شوند. به همین دلیل، امنیت ورودی و امنیت خروجی باید بهعنوان دو موضوع مرتبط اما متفاوت در نظر گرفته شوند.
رمزگذاری خروجی با هدف جلوگیری از تفسیر ناخواسته دادهها بهعنوان کد اجرایی انجام میشود. روش رمزگذاری باید با زمینه نمایش مطابقت داشته باشد؛ برای مثال، قواعد مربوط به متن HTML با قواعد مورد نیاز برای مقادیر JavaScript یکسان نیستند. در برنامههای ASP.NET Core، استفاده از قابلیتهای استاندارد Framework بهجای پیادهسازی دستی و ناقص رمزگذاری، انتخاب مطمئنتری است. توسعهدهندگان باید مسیر حرکت داده را از دریافت ورودی تا نمایش نهایی بررسی کنند تا نقاط آسیبپذیر شناسایی شوند.
بررسی امنیت خروجیها در برنامههای قدیمی ASP.NET
در برنامههای مبتنی بر ASP.NET قدیمی نیز نحوه نمایش دادههای کنترلشده توسط کاربران نقش مهمی در پیشگیری از XSS دارد. هنگام نگهداری یا توسعه چنین برنامههایی، باید مشخص شود که دادهها در کدام بخش از صفحه استفاده میشوند و آیا Framework آنها را بهصورت خودکار رمزگذاری میکند یا خیر. فرض کردن اینکه تمام خروجیها بهطور خودکار امن هستند، میتواند باعث نادیده گرفتن نقاط آسیبپذیر شود. بررسی بخشهایی که از HTML خام یا ساخت رشتههای پویا استفاده میکنند، میتواند به شناسایی ریسکها کمک کند.
در پروژههایی که بهتدریج از نسخههای قدیمی ASP.NET به ASP.NET Core منتقل میشوند، تفاوت میان APIها و الگوهای رندرینگ باید در نظر گرفته شود. روش امنی که در یک بخش از برنامه استفاده شده است، لزوماً در تمام زمینههای دیگر قابل استفاده نیست. به همین دلیل، بررسی کدهای موجود، آزمایش رفتار صفحات و بازبینی نقاطی که دادههای خارجی را نمایش میدهند، اهمیت دارد. رویکردی که بر شناخت زمینه خروجی و استفاده صحیح از قابلیتهای امنیتی تکیه دارد، به کاهش احتمال بروز آسیبپذیری کمک میکند.
سرفصل مطالب آموزش ویدئویی مقابله با حملات Cross Site Scripting (XSS) در ASP.NET Core
فصل اول: مقدمه دوره آموزشی
- مقدمه دوره آموزشی
فصل دوم: درک کردن حملات XSS
- ورژن های مربوط به ابزارهای استفاده شده در این آموزش
- مقدمه
- بررسی حملات XSS
- اهمیت انجام Encoding
- بررسی Attack Vector های دیگر و جلوگیری از آنها
- جلوگیری از حملات XSS با استفاده از Content Security Policy و یا CSP


