باگ XSS چیست ؟ آموزش جلوگیری از باگ XSS
باگ XSS چیست ؟
XSS مخفف Cross Site Scripting هست اما بدلیل اشتباه نگرفته شدن با CSS اون را XSS میخوانند.
حفره امنیتی XSS نوعی آسیب پذیری امنیتی وبسایت است که معمولاً در برنامه های وب مشاهده می شود.
حملات XSS به مهاجمان امکان می دهد اسکریپت های سمت کلاینت را به صفحات وب که توسط سایر کاربران مشاهده می شود، تزریق کنند. یک آسیب پذیری اسکریپت در سطح سایت ممکن است توسط هکرها برای دور زدن کنترل های دسترسی مانند پالاسی ها استفاده شود.
- XSS در وب سایت ها ، تقریباً 84٪ از کلیه آسیب پذیری های امنیتی ثبت شده توسط Symantec تا سال 2007 را به خود اختصاص داده است. در سال 2017 حملات XSS هنوز یک بردار اصلی تهدید در نظر گرفته میشد. اثرات XSS بسته به حساسیت اطلاعات داده شده توسط سایت آسیب پذیر و ماهیت هرگونه کاهش امنیتی که توسط شبکه مالک سایت انجام می شود، در محدوده مختلف از ناراحتی های کوچک تا ریسک امنیتی قابل توجه است.
مهاجم با استفاده از XSS جهت ارسال اسکریپت های مخرب به قربانی بهره می برد !
مرورگر کاربر نهایی، هیچ راهی برای تشخیص نامطمئن بودن اسکریپت نداشته و آن را اجرا خواهد نمود.
به دلیل اینکه مرورگر فرض را بر این می گذارد که اسکریپت ها از منبع مورد اعتماد می آیند و به اسکریپت مخرب اجازه ی دسترسی به تمام داده هایی که دسترسی به آن توسط مرورگر برای یک سایت امکان پذیر است را می دهد. این اطلعات حساس شامل کوکی ها، token های مربوط به یک نشست یا Session و.. می شوند. به وسیله ی این اسکریپت ها حتی می توان محتوای یک صفحه ی HTML را دوباره نوشت !
باگ XSS چگونه کار می کند ؟
Cross site scripting با دستکاری یک وب سایت آسیب پذیر کار می کند تا JavaScript مخرب را به کاربران بازگرداند. هنگامی که کد مخرب در داخل مرورگر قربانی اجرا می شود ، مهاجم می تواند تعامل آنها با برنامه را به طور کامل به خطر بیندازد.
انواع حملات XSS کدامند ؟
- سه نوع حمله اصلی XSS وجود دارد. اینها هستند :
Reflected XSS : جایی که اسکریپت مخرب از درخواست فعلی HTTP ناشی می شود.
Stored XSS : جایی که اسکریپت مخرب از پایگاه داده وب سایت تهیه می شود.
DOM-based XSS : که در آن آسیب پذیری در کد سمت مشتری به جای کد سمت سرور وجود دارد.
روش حمله باگ XSS
روش های زیادی برای این نوع حمله وجود دارد به طور مثال در این حمله با باز کردن یک صفحه وب سایت
کلیک روی یک لینک و یا باز کردن یک ایمیل کدی به صورت مخفی روی کامپیوتر کاربر اجرا میشود که میتواند اطلاعات مهمی را از سیستم کاربر سرقت کند. هکرها با استفاده از این حمله کوکیها را سرقت میکنند و از طریق آنها به اطلاعات کاربران دسترسی پیدا میکنند هنگامی که کاربر وارد یک حساب اینترنتی مانند ایمیل، حساب بانکی یا حساب های دیگر میشود اطلاعاتی (کوکی ها) روی کامپیوتر کاربر ذخیره میشود..
- به طور مثال امکان دارد پس از ورود اطلاعات یک کاربر مانند نام کاربری و رمز عبور در سایت
یکی از بانک ها یا موسساتی که در برابر XSS محافظت نشده اند، این اطلاعات توسط هکر، بدون اینکه کاربر آگاهی یابد سرقت شود و سپس حساب بانکی کاربر مورد دستبرد واقع شود. این روش در مورد بقیه حساب های کاربری اینترنتی هم امکان پذیر است.
حمله برای آلوده کردن یک وب سایت
قرار است قوانین، اسکریپت ها را فقط در صورت بارگیری اسکریپت از همان دامنه صفحه ای که کاربر در حال مشاهده آن است، مجاز بگذارد. و در واقع مهاجمان دسترسی مستقیمی به سرور مسئول صفحه نمایش داده شده توسط مرورگر ندارند. بنابراین مهاجمان چگونه این کار را انجام می دهند ؟
آسیب پذیری های برنامه می تواند به مهاجمین کمک کند تا بتوانند قطعات و کد مخربی را در محتوای صفحه تعبیه کنند.
به عنوان مثال : یک موتور جستجوی معمولی در هنگام نمایش نتایج جستجو پرسش کاربر را تکرار می کند.
اگر کاربر سعی کند رشته “<script> alert (1) </script>” را پیدا کند چه می شود؟ آیا محتوای صفحه نتایج جستجو منجر به اجرای این اسکریپت می شود و آیا کادر گفتگویی با پیام “1” ظاهر می شود؟ این بستگی به میزان تأیید توسعه دهندگان برنامه های وب ورودی کاربر و تبدیل آن به یک قالب امن دارد.
- مشکل اصلی در این واقعیت است که کاربران با طیف گسترده ای از نسخه های مرورگر
از آخرین نسخه های پیش آلفا گرفته تا نسخه های دیگر پشتیبانی نمی شوند. هر مرورگری صفحات وب را به روشی کمی متفاوت اداره می کند. در برخی موارد هنگامی که ورودی ها به اندازه کافی فیلتر نشده باشند، حمله XSS می تواند کاملاً موفق باشد. بنابراین اولین قدم در حمله XSS تعیین نحوه جاسازی داده های کاربر در یک صفحه وب است.
وب سایت آلوده به کاربران حمله می کند !
مرحله دوم این است که مهاجم کاربر را مجاب کند که از یک صفحه خاص بازدید کند.
مهاجم همچنین باید بردار حمله را به صفحه منتقل کند. یک بار دیگر در اینجا چیزی وجود ندارد که مانعی جدی ایجاد کند. وب سایت ها اغلب داده ها را به عنوان بخشی از URL می پذیرند. برای اجرای بردار حمله، مهاجمان می توانند از روشهای مختلف مهندسی اجتماعی یا فیشینگ استفاده کنند.
کد مثال زیر دقیقاً چنین رشته ای را نشان می دهد (که توسط کاربر در درخواست HTTP ارسال شده است) در سرور :
protected void doGet(HttpServletRequest request, HttpServletResponse resp){
String firstName = request.getParameter(“firstName”);
resp.getWriter().append(“<div>”);
resp.getWriter().append(“Search for ” + firstName);
resp.getWriter().append(“</div>”);
}
- کد مقدار اولین پارامتر URL را که در درخواست کاربر منتقل شده پردازش می کند.
سپس پارامتر را در صفحه وب حاصل نمایش می دهد. به نظر می رسد توسعه دهنده انتظار ندارد که در پارامتر firstName به جز متن ساده و بدون برچسب HTML چیز دیگری ببیند. اگر مهاجم درخواست “http://very.good.site/search؟firstName= <script> alert (1) </script>” را ارسال کند صفحه نهایی به شرح زیر است :
<div>
Search for
<script>alert(1)</script>
</div>
به راحتی می توانید بررسی کنید که وقتی این قطعه HTML بر روی یک صفحه وب در مرورگر کاربر بارگذاری می شود
اسکریپت منتقل شده در پارامتر URL firstName اجرا می شود. در این حالت ، JavaScript مخرب در متن سرور آسیب پذیر اجرا می شود. بنابراین اسکریپت می تواند به داده های کوکی دامنه، API آن و موارد دیگر دسترسی پیدا کند. البته مهاجم بردار واقعی را به شکلی توسعه می دهد که حضور آنها را در صفحه مشاهده شده توسط کاربر مخفی کند.
روش جلوگیری از باگ XSS
حمله Cross-site scripting یا XSS یک نوع حمله تزریق کد میباشد که در سمت کاربر اتفاق می افتد
و در آن حمله کننده میتواند کد و اسکریپت مخرب خود را در قالب یک فعالیت معمولی به وبسایت تزریق کند. با استفاده از XSS حمله کننده قربانی خود را به طور مستقیم مورد هدف قرار نمیدهد بلکه او از وبسایت به عنوان یک وسیله برای حمل و رساندن کد مخرب به مرورگر قربانی استفاده میکند. از حملات XSS به طور عمده در جاوا اسکریپت استفاده میشود.
1. Escaping
در این روش اطلاعات ورودی توسط کاربر به نوعی سانسور میشوند.
مثلا از ثبت بعضی از کارکترهای خاص مانند > و < که ممکن است در دستورات کد استفاده شوند جلوگیری می شود
و باعث میشوند که کدهای مخرب از کار بیفتند. اگر سایت شما به نوعی است که به کاربران اجازه اضافه کردن کد خود را نمیدهد، راه حل خوب میتواند escape کردن تمامی متون از جمله HTML, URL و Javascript باشد. ولی در صورتی که سایت از متون غنی(rich text) پشتیبانی میکند مانند سایتها فروم و یا ثبت نظرها، اجرای این روش کمی سخت تر میشود زیرا باید کاراکترهایی که escape میشوند را به دقت انتخاب کنید.
2. Validating Input
اعتبار سنجی ورودی پروسه ای است که در آن از اطلاعات ورودی به سایت و مرتبط بودن آن اطمینان حاصل میشود. با اعتبار سنجی درست میتوان جلو ورود کد های مخرب به سایت را گرفت. در این روش کاربر اجازه ورود یک سری کاراکتر های خاص در فیلدهای مربوط به خود را دارد. مثلا فیلد دریافت شماره تلفن فقط باید اعداد را دریافت کند و اجازه ورود هر کاراکتری به جز عدد را ندهد.
3. روش های جلوگیری حرفه ای
جلوگیری از XSS در سناریو های متفاوت باید با روشها و فیلترهای مختلفی انجام گیرد.
هرچقدر هم که وبسایت یا سرویس خود را امن کنیم، باز هم خطر XSS وجود خواهد داشت. بنابراین باید از متدهای زیر نیز برای امن کردن بیشتر استفاده کنیم :
از کتابخانه های مخصوص XSS استفاده کنید. فیلتر و اسکیپ کردن خروجیها بصورت دستی و تشخیص رخنه ها کار بسیار سختی است. از این رو کتابخانههای بسیار امنی مانند HTML Purifier و HtmlSanitizer بوجود آمده اند. شدیداً توصیه میشود که از این کتابخانهها برای اسکیپ کردن خروجیهای خود استفاده کنید.
نتیجه
امنیت به هیچ وجه 100 درصد نیست. مانند سایر باگها، ممکن است XSS نیز در پی بی توجهی برنامه نویس به مسائل امنیتی، در قسمتهایی از برنامه تحت وب وجود داشته باشد که پیدا کردن آن حتی به فکر خود برنامه نویس هم ممکن است خطور نکند.
علاوه بر این چیزهایی که در این پست گفته شده است فقط قسمتی از نحوه تامین امنیت سایت در مقابل XSS است و به هیچ وجه نمیتواند یک منبع کاملاً امن به شمار برود. برای اطلاع بیشتر از نحوه جلوگیری از باگ XSS و استراتژی های مختلف در سناریو های متفاوت، به دوره آموزشی ما درمورد حفره امنیتی XSS و دوره جاوا اسکریپت مراجعه کنید.
سلام خدمت شما مقاله مقیدی بود ولی لطفا یک مقاله برای ک باگ ها بزارید
19
مرسی بابت مطلبتون خیلی مفید بود
42
خواهش میکنم . ممنون از کامنت گذاشتنتون
42