Cross Site Scripting
چگونه از برنامه خود در برابر هكرها محافظت كنيم
در بخش نخست اين مقاله به بررسي حملات SQL Injection و راهكار مقابله با آن پرداختيم. در اين مقاله برآنيم تا برنامه نويسان را با يكي ديگر از رايج ترين تكنيك هاي مورد استفاده مهاجمان در ايجاد تداخل و سرقت اطلاعات كاربران آشنا كنيم.
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 به شكل زير در خواهد آمد:
http://testasp.acunetix.com/
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 بود. به ياد داشته باشيد، درصورتيكه برنامه نويس به درستي اقدام به مقابله با اين نوع حملات نكند، مي تواند منجر به آسيب هاي جدي از جانب مهاجمان شود.
محمد غفاري
منابع
http://www.acunetix.com
http://wikipedia.org
http://redworkdesign.info