حسین کعبی: وقتی فیگو را در جام جهانی زدم....
Cross Site Scripting
برخی Cross Site Scripting (XSS یا CSS) بهمعنای «اسکریپتنویسی از سایت خارجی» را با Cascading Style Sheets اشتباه میگیرند. که یکی از رایجترین تکنیکهای تخریب برنامههای تحت وب است و حدود 27درصد از تکنیکهای مورد استفاده مهاجمان را بهخود اختصاص میدهد.
یک صفحه وب متشکل از متون و نشانهای HTML است که توسط سرور تولید و بهوسیله مرورگر کاربر ترجمه و نمایش داده میشود. کنترل کامل نحوه ترجمه یک صفحه توسط مرورگر، تنها برای وب سایتهایی ممکن است که دارای صفحات کاملا ایستا هستند. ولی وب سایتهای تولیدکننده صفحات پویا، کنترل کاملی بر نحوه ترجمه خروجی خود نخواهند داشت و در صورت تزریق کدهای مخرب در این صفحات، نه کاربر و نه وب سایت، هیچ یک قادر به تشخیص خطر و انجام نکات حفاظتی نخواهند بود.
با استفاده از تکنیک XSS، مهاجم با وارد کردن کدهای مخرب جاوااسکریپت، ویبیاسکریپت، اکتیواکس، HTML یا فلش خود در صفحه وب، اقدام به فریب کاربر و اجرای اسکریپت روی رایانه وی میکند که در نهایت منجر به تغییر یا سرقت کوکی کاربر، دستیابی به برخی اطلاعات خصوصی و ارسال برخی درخواستهای ناخواسته از سوی کاربر میشود.
سه نوع مشخص XSS وجود دارد که در ادامه به بیان هر یک از آنها میپردازیم:
1- Non-persistent
رایجترین نوع XSS است. وبسایتهایی که اقدام به استفاده اعتبارسنجی نشده مقادیر ورودی کاربر در نمایش خروجی میکنند، مستعد آسیبپذیری این نوع حملات هستند.
در زیر به بیان مثال سادهای از این حمله میپردازیم:
قسمت جستجوی یک صفحه وب را در نظر بگیرید که پس از دریافت عبارت مورد نظر از کاربر، بههمراه عبارت جستجو شده، نتیجه را نمایش میدهد. (برای یافتن سایتهای با قابلیت جستجو، میتوانید عبارت "inurl:?search" را در گوگل جستجو کنید.)
در صورتیکه عبارت "XSS Vulnerability" را جهت جستجو وارد کنید، URL بهشکل زیر در خواهد آمد:
Search.asp?tfSearch=XSS%20Vulnerability
این بار عبارت زیر را وارد و دکمه جستجو را برگزینید:
«script type="text/javascript"»alert('Hello');«/script»
حال URL بهشکل زیر در خواهد آمد:
http://testasp.acunetix.com/Search.asp?
tfSearch=%3Cscript+type%3D%22text
%2Fjavascript%22%3Ealert%28%27
Hello%27%29%3B%3C%2Fscript%3E
و بهمحض بارگذاری صفحه یک پیام "Hello" نمایش داده خواهد شد، درصورت مشاهده متن صفحه جاری اسکریپت فوق قابل مشاهده خواهد بود (اعداد و نشانهای موجود درURL فوق، کد اسکی معادل کاراکترهای فضایخالی، پرانتز و... است).
بهعنوان یک مثال دیگر، اسکریپت زیر را بهعنوان عبارت جستجو وارد کنید:
«script»document.body.innerHTML=
'«div»«h1»this site deface by XSS«/h1»
«/div»';«/script»
همانطور که مشاهده میکنید، در نتیجه این جستجو کلیه محتویات صفحه حذف و عبارت " this site deface by XSS" در صفحه درج خواهد شد.
2- Persistent
این نوع از XSS منجر به حملههای خطرناکی از جانب مهاجمان میشود. وبسایتهایی که ابتدا مقادیر ورودی کاربر را ذخیره میکنند و بیدرنگ بدون اتخاذ کدینگ مناسب، مقادیر را به کاربر نمایش میدهند، مستعد این دسته از حملات هستند.
آنچه اهمیت این دسته از حملات XSS را زیاد میکند پردازش چند باره آنها بهدلیل خواندن از منبع اطلاعاتی و تحت تاثیر قرار دادن طیف وسیع کاربران سایت است.
بهعنوان یک مثال کلاسیک، میتوان به Message Boardهایی اشاره کرد که در آن کاربر میتواند پیامهای خود را در قالب HTML برای سایت ارسال کند و دیگر کاربران نیز امکان مشاهده این پیامها را دارند. پس اگر مهاجم دستور مخرب خود را در قالب یک پیام ارسال کند، این دستور در بانک اطلاعاتی سایت ذخیره شده و با ورود هر کاربر از بانک فراخوانی و نمایش داده میشود، بنابراین این دستور مخرب کلیه کاربران را تحت تاثیر قرار خواهد داد.
3- DOM-based
«مدل شیء سند» یا DOM(Document Object Model) واسطی است که با استفاده از آن، برنامهها امکان دسترسی و بهروزرسانی محتوا، ساختار و استایل مستندات HTM را دارند. این خود شامل اشیایی چون Body، Location، URL، Referrer و ... است. بهعنوان مثال، شیء Body شامل کد HTML صفحه است، بنابراین این اشیا مستقل از کدهای HTML صفحه هستند.
این دسته از حملات XSS ، صفحات وبی را که با بهرهگیری از جاوااسکریپت، اقدام به استفاده از این اشیاء میکنند، هدف قرار میدهد.
راهکار مقابله با XSS
پرهیز از آنچه آشکارا موجب استفاده مهاجمان میشود و فیلترینگ و حذف کاراکترهای خطرناک وارد شده توسط کاربر.
توجه به این نکته ضروری است که علاوه بر شکل معمول کاراکترها، نسبت به ارزیابی و فیلترینگ کد اسکی و هگزادسیمال معادل آنها نیز اقدام کنید.
آنچه بیان شد، تنها اشاره کوچکی از حمله XSS بود. بهیاد داشته باشید، درصورتیکه برنامهنویس بهدرستی اقدام به مقابله با این نوع حملات نکند، میتواند منجر به آسیب های جدی از جانب مهاجمان شود.
محمد غفاری
منابع
حسین کعبی: وقتی فیگو را در جام جهانی زدم....