در این مطلب قصد داریم راجع به آسیب پذیری XSS و راههای محافظت در برابر آن را بنویسیم. با یک مثال شروع میکنیم :
فرض کنید صاحب یک وبسایت شبکه اجتماعی هستید. همانطور که میدانید فعالیت کاربران در این نوع وبسایتها بیشتر با دیدگاه یا comment گذاشتن مشخص میشود.
هر چقدر فعالیت کاربران در انتشار پست و دیدگاه گذاشتن بیشتر شود، محبوبیت وب سایت شما بیشتر میشود. متاسفانه به همین نسبت توجه خرابکاران هم به وبسایت شما بیشتر میشود. آنها قصد دارند به وبسایت و اطلاعات کاربران شما دسترسیهای غیر مجاز داشته باشند.
خرابکاران میتوانند با سو استفاده از سیستم دیدگاه گذاشتن وب سایت شما، کد جاوا اسکریپت به وب سایت ارسال کنند (یا کد جاوا اسکریپت تزریق کنند). در اینصورت میگوییم حمله XSS رخ داده است. برای مثال در قسمت متن دیدگاه وبسایت خود کد زیر را وراد کنید:
<script> alert('This is a test') </script>
اگر یک پنجره با نوشته This is a test ظاهر شد، یعنی وبسایت شما نسبت به XSS آسیب پذیر است.
خرابکاران به وسیله آسیب پذیری XSS میتوانند کوکیهای سایر کاربران را به سرقت ببرند که منجر به سرقت نشست (session hijacking) میشود.
خرابکار چه استفادههایی از آسیب پذیری XSS میتواند انجام دهد:
آسیب پذیری XSS اجازه اجرا شدن خودسرانه کدهای جاوا اسکریپت را میدهد. بنابراین شدت آسیب وارده به حساسیت دادههای وبسایت قربانی بستگی دارد.
- پخش کردن کرم (Worm) در وبسایتهای شبکه اجتماعی.
- سرقت نشست : جاوا اسکریپت مخرب ID نشست را به وبسایتی که تحت کنترل خرابکار است ارسال میکند. در نتیجه خرابکار میتواند خود را جای آن کاربر جا بزند.
- سرقت هویت : اگر کاربر اطلاعات مهمش مانند کارت اعتباری و غیره را وارد وبسایت آسیب پذیر کند، خرابکار میتواند آن اطلاعات را با جاوا اسکریپت مخرب به سرقت برد.
- حمله DoS
- سرقت اطلاعات مهم مانند رمزعبور
راههای حفاظت از حمله XSS :
۱-کنترل ورودی پویا
کنرل ورودی پویا به معنی جلوگیری از واردن کردن تگها از فیلدهای قابل ویرایش وبسایت است. بدین صورت که به جای علائم HTML از کاراکترها استفاده شود که به این Escape Dynamic Content میگویند. برای مثال :
” —–> "
# —–> #
& —–> &
‘ —–> '
( —–> (
) —–> )
/ —–> /
; —–> ;
< —–> <
> —–> >
امروزه بیشتر صفحات وب توسط CMSها ساخته میشوند. CMSهای معروف به صورت پیش فرض escape dynamic content را اعمال میکنند.
۲- استفاده از Content-Security Policy
مرورگرهای به روز از Content-Security Policy پشتیبانی میکنند. این قابلیت برای مثال به صاحب وبسایت این توانایی را میدهد که بتواند اجرای کدهای جاوا اسکریپت را کنترل کند. از طرفی آسیب پذیری XSS به خرابکار این اجازه را میدهد که روی وبسایت قربانی کد مخرب جاوا اسکریپت اجرا کند.
با استفاده از Content-Security Policy شما میتوانید به مرورگر بگویید هرگز جاوا اسکریپتهای بر خط (In line) را اجرا نکند و مشخص کنید کدام دامنه میتواند میزبان جاوا اسکریپت وبسایت شما باشد.
Content-Security-Policy: script-src 'self' https://apis.google.com
علاوه بر ارسال دستور فوق به مرورگر توسط HTTP Header، میتوانید از تگ meta در صفحات html نیز استفاده کنید.
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">
۳- Sanitize HTML
میتوانید برای پاکسازی تگها از کتابخانه Sanitize HTML استفاده کنید. در واقع این پروسه ورودیهای مخرب کاربران را پاک میکند. در زبانهای مختلف پاکسازی HTML با توابع مختلفی انجام میشود. برای مثال در php میتوانید از تابع strip_tags() استفاده کنید.
HTTP-only Cookies
همانطور که بالاتر خواندیم، سرقت نشست یکی از خطراتی است که در حمله XSS متوجه کاربران وبسایت میشود. برای جلوگیری از این تهدید، باید از کوکیهای httponly استفاده کنید. به این معنی که کوکیها فقط توسط مرورگر ارسال، دریافت و ذخیره میشوند و نمیتوان با استفاده از جاوا اسکریپت آنها را ویرایش کرد یا خواند.
همین حالا وبسایت خود را برای آسیب پذیری XSS بررسی کنید و تمهیدات لازم را انجام دهید. فراموش نکنید اگر خود ما وبسایتمان را بررسی نکنیم، اشخاص دیگر پیشقدم میشوند و ممکن است اطلاعات ما یا کاربران را به مخاطره بیاندازند.
[…] این مقاله آموزشی وبسایت امنیت دیجیتال کنشتک به توضیح آسیبپذیری XSS […]