اسکریپت نویسی بین سایتی (XSS) یک آسیب پذیری است که به مهاجم اجازه می دهد اسکریپت های مخرب را به یک صفحه وب تزریق کند، اسکریپت هایی که سپس در مرورگر کاربر دیگری اجرا می شوند، گویی که به آنجا تعلق دارند. این آسیب پذیری به طور مداوم در رتبه بندی قرار دارد OWASP 10 برترو این همچنان یکی از رایجترین روشهایی است که مهاجمان برای سرقت دادههای نشست، ربودن حسابها یا از بین بردن بیسروصدای اعتماد یک برنامه نزد کاربران خود، استفاده میکنند.
SAST ابزارها یکی از موثرترین راهها برای تشخیص زودهنگام این آسیبپذیریها هستند و کد منبع را برای یافتن الگوهای دقیقی که اجازه میدهند XSS از بین برود، قبل از اینکه آن کد به مرحله تولید برسد، اسکن میکنند. در این پست: سه نوع رایج XSS، شکل ظاهری آنها در کد واقعی و نحوهی عملکرد آنها SAST ابزارها (بهعلاوهی چند روش کدنویسی) قبل از ارسال، آنها را خاموش میکنند.
آسیبپذیریهای XSS چیستند و چرا باید به آنها اهمیت داد؟
آسیبپذیریهای XSS زمانی اتفاق میافتند که یک برنامه ورودی غیرقابل اعتماد، چیزی که کاربر تایپ میکند، پیست میکند یا در URL وارد میکند، را دریافت میکند و آن را بدون اعتبارسنجی صحیح یا escape کردن، دوباره به یک صفحه رندر میکند. وقتی این اتفاق میافتد، یک مهاجم میتواند به جای متن معمولی، یک اسکریپت را وارد کند و مرورگر هیچ راهی برای تشخیص تفاوت ندارد: فقط آن را با همان اعتماد و مجوزهایی که بقیه صفحه دارد، اجرا میکند.
این همان چیزی است که XSS را خطرناک میکند، حتی اگر اشکال اساسی آن اغلب کوچک باشد. یک فیلد ورودیِ پاکسازی نشده میتواند به مهاجم اجازه دهد کوکیهای جلسه را بدزدد و یک حساب کاربری وارد شده را بدزدد، کاربران را بیسروصدا به یک صفحه فیشینگ هدایت کند، کلیدهای فشرده شده را ثبت کند یا محتوایی را که بازدیدکننده میبیند بازنویسی کند، همه اینها بدون اینکه مستقیماً به سرورهای شما دست بزند. این آسیبپذیری کاملاً در نحوه اعتماد مرورگر به خروجی خود برنامه شما نهفته است.
به همین دلیل است که XSS اغلب در بین 10 آسیبپذیری برتر OWASP ظاهر میشود: به یک زنجیره بهرهبرداری پیچیده نیاز ندارد، فقط یک ورودی نادیده گرفته میشود و شعاع انفجار به هر کاربری که صفحه آسیبدیده را بارگذاری میکند، گسترش مییابد.
حملات XSS رمزگشایی شده: سه نوع رایج
۱. XSS ذخیرهشده: تهدیدی پایدار
XSS ذخیره شده یک اسکریپت مخرب را به طور دائم روی سرور قرار میدهد، بنابراین برای هر کاربری که بعداً صفحه آسیب دیده را مشاهده میکند، به طور خودکار اجرا میشود.
آسیبپذیریهای XSS ذخیرهشده زمانی رخ میدهند که اسکریپتهای مخرب بهطور دائم روی سرور (مثلاً در پایگاه داده) ذخیره میشوند و هر زمان که کاربر به صفحه آسیبدیده دسترسی پیدا میکند، اجرا میشوند.
مثال: یک فیلد توضیح که ورودیهای نامعتبر کاربر را میپذیرد:
۲. XSS بازتابی: ارائه شده در لحظه
XSS بازتابی در یک لینک ساخته شده قرار دارد و اسکریپت فقط زمانی اجرا میشود که قربانی روی آن کلیک کند، که معمولاً از طریق فیشینگ یا مهندسی اجتماعی انجام میشود.
XSS بازتابی زمانی رخ میدهد که اسکریپتهای مخرب در URLها جاسازی شده و هنگام تعامل کاربر با لینک اجرا شوند، که معمولاً از طریق فیشینگ یا مهندسی اجتماعی ارائه میشود.
مثال:
۳. XSS مبتنی بر DOM: حملات پنهان در مرورگر
XSS مبتنی بر DOM هرگز به سرور دسترسی پیدا نمیکند، اسکریپت مخرب کاملاً سمت کلاینت و از طریق جاوا اسکریپتی که محتوای صفحه را به درستی مدیریت نمیکند، اجرا میشود.
در این نوع، اسکریپتهای مخرب از آسیبپذیریهای موجود در جاوا اسکریپت سمت کلاینت برای دستکاری مدل شیء سند (DOM) سوءاستفاده میکنند.
مثال: یک قطعه کد جاوا اسکریپت که به صورت پویا ورودیهای کاربر را بدون کد امنیتی رندر میکند:
کنجکاوم بدونم چند تا از این الگوها از قبل توی کدبیس شما وجود داره؟ Xygeni SAST قبل از رسیدن به ...، خطرات XSS مبتنی بر DOM، ذخیره شده، منعکس شده و پرچم گذاری شده را به طور خودکار اسکن میکند. pull request.
چگونه SAST ابزارها XSS را در مسیر خود متوقف میکنند
تست امنیت برنامه استاتیک (SASTابزارها در شناسایی آسیبپذیریهای XSS در اوایل چرخه عمر توسعه نرمافزار بسیار ارزشمند هستند (SDLC).
مزایای کلیدی
مشکلات Catch در اوایل توسعه
SAST ابزارها قبل از استقرار برنامه، کد منبع را برای الگوهای آسیبپذیر اسکن میکنند.
نمونهای از یک آسیبپذیری علامتگذاری شده:
جایگزین امن:
کل کدبیس را تجزیه و تحلیل کنید
مدرن SAST این ابزارها فقط کد سفارشی را تجزیه و تحلیل نمیکنند؛ بلکه وابستگیها و کتابخانههای شخص ثالث را نیز اسکن کرده و خطرات پنهان را شناسایی میکنند.
یکپارچه با CI/CD
SAST ابزارها به طور خودکار آسیبپذیریهای XSS را اسکن میکنند pull requests و از ادغام کدهای ناامن جلوگیری کنید.
روی آنچه بیشترین اهمیت را دارد تمرکز کنید
SAST ابزارها با ارزیابی میزان آسیبپذیری و شدت آن، اصلاحات را اولویتبندی میکنند و به تیمها این امکان را میدهند که ابتدا مهمترین مسائل را حل کنند.
چگونه Xygeni به شما کمک میکند تا در نبرد علیه XSS پیروز شوید
Xygeni تجزیه و تحلیل استاتیک، اصلاح مبتنی بر هوش مصنوعی و قابلیت مشاهده زنجیره تأمین را ترکیب میکند تا فاصله بین یافتن یک آسیبپذیری XSS و رفع واقعی آن را از بین ببرد. نحوه انجام این کار به شرح زیر است:
- Code Security (SAST): کد شخص ثالث را هنگام نوشته شدن برای XSS و سایر نقصهای تزریق اسکن میکند و قبل از استقرار، آنها را شناسایی میکند. در معیار OWASP، Xygeni-SAST در تشخیص XSS، نرخ تشخیص صحیح ۱۰۰٪ و حداقل تشخیصهای کاذب را کسب میکند.
- هوش مصنوعی، خودکارسازی: فوراً آسیبپذیریهای XSS علامتگذاری شده را با اصلاحات آماده برای توسعهدهنده برطرف میکند و ... pull request با یک جایگزین امن که با کدبیس شما هماهنگ شده است، بدون نیاز به وصلهگذاری دستی.
- دفاع در برابر بدافزار: وابستگیها و کتابخانههای شخص ثالث را برای کد تزریقشده یا در معرض خطر نظارت میکند، بنابراین یک الگوی آسیبپذیر که در یک بسته متنباز پنهان شده است، از بررسی کد شخص ثالث شما پنهان نمیماند.
- IDE و CI/CD انتگرال گیری: مشکلات را مستقیماً در IDE هنگام نوشتن کد علامتگذاری میکند و حاشیهنویسی میکند pull requests به طور خودکار در سراسر GitHub، GitLab، Bitbucket، Azure DevOps و Jenkins، بنابراین کد آسیبپذیر در وهله اول ادغام نمیشود.
ساخت برنامههای انعطافپذیر: نکاتی برای جلوگیری از اسکریپتنویسی بینسایتی
برای ایمنسازی بیشتر برنامههای خود، این شیوهها را در کنار هم پیادهسازی کنید SAST ابزار:
- ورودیهای کاربر را پاکسازی کنید: برای پاکسازی قوی از کتابخانههایی مانند DOMPurify استفاده کنید.
- خروجیهای کدگذاری: همیشه دادههای پویا را قبل از رندر کردن در مرورگر، کدگذاری کنید.
- پیادهسازی سیاستهای امنیت محتوا (CSP): اجرای اسکریپت را به منابع معتبر محدود کنید.
- ممیزی کد را به صورت مداوم انجام دهید، نه دورهای: به جای برنامهریزی بررسیهای دستی، Xygeni را اجرا کنید SAST اسکن به صورت pre-commit قلاب یا مستقیماً در شما CI/CD pipeline (GitHub، GitLab، Bitbucket، Azure DevOps، Jenkins)، بنابراین هر commit به طور خودکار بررسی میشود و کد ناامن هرگز به ادغام نمیرسد.
آمادهاید تا برنامههای خود را در برابر XSS ایمن کنید؟
آسیبپذیریهای XSS لزوماً امنیت برنامه شما را تهدید نمیکنند. درک نحوه عملکرد آنها، شناسایی و مقابله با آنها SAST ابزارها، و پیروی از شیوههای کدنویسی امن میتواند میزان آسیبپذیری شما را قبل از اینکه مهاجمی شکاف را پیدا کند، تقریباً به صفر برساند.
At شیگنیما طوری ساخته شدهایم که این آسیبپذیریها را زود تشخیص دهیم، آنهایی را که واقعاً مهم هستند در اولویت قرار دهیم و آنها را از دسترس شما دور نگه داریم. pipelineکاملاً.
نسخه ی نمایشی را رزرو کنیدیا همین امروز اسکن کد خود را به صورت رایگان شروع کنید.
سوالات متداول
آسیبپذیری XSS چیست؟
XSS (اسکریپت نویسی بین سایتی) یک آسیب پذیری است که به مهاجم اجازه می دهد یک اسکریپت مخرب را به یک صفحه وب تزریق کند، که سپس در مرورگر کاربر دیگری اجرا می شود، گویی بخشی از سایت قانونی است.
سه نوع اصلی XSS کدامند؟
XSS ذخیرهشده (اسکریپت روی سرور ذخیره میشود و برای هر بازدیدکننده اجرا میشود)، XSS بازتابشده (اسکریپت در یک لینک جاسازی شده و فقط زمانی اجرا میشود که روی آن لینک کلیک شود) و XSS مبتنی بر DOM (اسکریپت بهطور کامل در مرورگر از طریق جاوااسکریپت ناامن سمت کلاینت، بدون دخالت سرور، اجرا میشود).
قوطی SAST ابزارها XSS مبتنی بر DOM را تشخیص میدهند؟
بله مدرن SAST ابزارها، جاوا اسکریپت سمت کلاینت را برای یافتن الگوهای ناامن مشابه (مانند ورودیهای بدون کدنویسی که مستقیماً در DOM نوشته میشوند) که باعث XSS مبتنی بر DOM میشوند، اسکن میکنند، نه فقط کدهای سمت سرور.
آیا XSS هنوز یک آسیبپذیری رایج است؟
بله. XSS همچنان یکی از موارد دائمی در فهرست ۱۰ آسیبپذیری برتر OWASP است، عمدتاً به این دلیل که فقط یک فیلد ورودی نادیده گرفته شده برای افشای کل اطلاعات کاربران یک برنامه کافی است.
چگونه است SAST ابزاری متفاوت از فایروال برنامه وب (WAF) برای جلوگیری از XSS؟
A SAST این ابزار قبل از استقرار، الگوی آسیبپذیر را در کد منبع شما پیدا میکند، بنابراین باگ هرگز ارسال نمیشود. یک WAF در مقابل یک برنامه در حال اجرا قرار میگیرد و سعی میکند درخواستهای مخرب را در زمان اجرا مسدود کند، این یک شبکه ایمنی است، نه یک راه حل برای کد اصلی.





