بزارید با یه مقدمه کوچولو در مورد کوکی ها شروع کنم. البته چیزایی رو که میخوام بگم همه میدونن ولی برای روشن شدن بحث لازمه.
میدونید که مرورگر کوکیهایی رو که برای یه سایت ست کرده دست هر کسی نمیده. مثلاً کوکی هایی که برای سایت yahoo.com تو یه مرورگر ایجاد شده فقط برای سایت yahoo.com قابل دسترسیه و گوگل نمیتونه اونا رو بخونه. (البته در مورد امنیت کوکی ها نمیخوام بحث کنیم)
برای اینکه یه هکر بتونه کوکی های سایت مورد نظرش رو از یه کاربر بگیره باید اسکرپتشو از توی همون دامنه اجرا کنه.
برای روشن شدن قضیه کد زیر رو تو یه فایل html ذخیره کنید و تو چند تا دامنه (تو لوکال هاست) اجرا کنید تا کوکی های اون دامنه رو برایتون نمایش بده:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همونطوری که خواهید دید نتیجه نمایش برای دامنه های مختلف یکی نیست (اگر کوکی مربوط به آن دامنه در مرورگر موجود باشه).
حالا بریم سر اصل قضیه: XSS
فرض کنید ما تو سایتمون یه فرم نظر سنجی داریم که نظر کاربران رو میگیره و همونطوری که هست نشون میده. متن فرم هم مهم نیست که GET باشه یا POST. فرقی هم نمیکنه که مطالب فرم کجا ذخیره بشه. تو دیتابیس یا تو فایل تفاوتی نداره.
خوب دیگه، یه هکر چیز زیادی لازم نداره. همینقدر که مطالبش رو بدون تصفیه کردن نمایش بدیم براش کافیه.
هکر کافیه بیاد این کد رو به جای نظر خودش ارسال کنه:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا به محض اینکه هر بازدید کننده ای از صفحه ای که بازدید کنه که اون کد رو نمایش میده به سایت هکر ریدایرکت میشه که کوکی های مربوط به اون دامنه رو از مرورگر بازدید کننده میگیره و تقدیم هکر میکنه. مثلاً وقتی من تو لوکال آزمایش کردم به این آدرس ریدایرکت شد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همونطور که میبینید شناسه سشن مربوط به دامنه که توی کوکی ها ذخیره شده بود به هکر ارسال شد!
حالا تنها کاری که هکر لازمه انجام بده اینه که یه شناسه مثل همونی که دریافت کرده برای مرورگرش ست کنه و بدون اینکه نیازی به لوگین کردن داشته باشه به حساب کاربری من وارد شه! از اونجا هم میتونه اطلاعات منو برداره یا اینکه کلمه عبورمو عوض کنه...
مثالی که زدم خیلی تابلو بود ولی هکر میتونه جوری اطلاعات رو بدزده که کاربر متوجه نشه. مثلاً میتونه با Ajax اطلاعاتش رو بفرسته بدون اینکه صفحه اصلی ریدایرکت بشه!
---------------------------------------
تا اینجا امیدوارم متوجه شده باشید که منظور ما کدوم نوع از حمله هست و فرقش با SQL Injection چی هست.
الان یه کم سرم شلوغه ایشالله تو اولین فرصت در مورد راه حلش هم بحث میکنیم.
شما هم نشینید هی سر صورت مسئله بحث کنید. بری سراغ راه حلها دیگه