حملات XSS و CSRF چیست

در دنیای امنیت سیستم های نرم افزاری، مباحث پیچیده و شیرینی وجود داره که باعث میشه هر از گاهی، یه خورده مطالعه در این زمینه داشته باشم. توی ادامه به توضیح دو حمله XSS و CSRF می پردازم.

برخی از مهمترین موارد آسیب پذیری نرم افزارهای تحت وب عبارتند از:


1. Injection Flaws
2. Cross Site Scripting(XSS)
3. Broken(HTTP) Authentication and Session Management
4. Insecure Direct Object References
5. Cross Site Request Forgery (CSRF)
6. Security misconfiguration
7. Failure to restrict URL access
8. Insecure Cryptographic Storage
9. Insufficient Transport Layer Protection
10. Unvalidated redirects and forwards

که من موارد 2 و 5 رو خدمتتون شرح میدم. یعنی XSS و CSRF.

XSS که نام کاملش Cross Site Scripting (به دلیل اینکه مخففCSS با Cascading Style Sheets که مربوط به طراحی وب هست اشتباه نشه از X بجای C در مخفف آن استفاده شده) ، حمله ای است که از طریق اعتماد یک کاربر به یک سایت نشئت میگیره.

CSRF (بخونید Sea-surf) که نام کاملش Cross Site Request Forgery است، از طریق اعتماد یک سایت به یک کاربر نشئت میگیره.


XSS

================

در حملات XSS ، کوکی مرورگر قربانی به سرقت میره. این کوکی حاوی اطلاعات مختلفی مثل اطلاعات لاگین، ورود به سایت بانک و یا غیره میتونه باشه.که در ادامه توضیح میدم که چطور این کار انجام میشه.

کلا راه های مورد استفاده هکر برای حمله XSS معمولا دو راه است. یکی ارسال لینک به قربانی (از طریق ایمیل و....) و دیگری اجرای کدمخرب با استفاده از سایتی که کاربر از اون بازدید میکنه.

فرض کنید هکر، در قسمت نظرسنجی یک سایت، کد زیر رو وارد کنه و سایت بدون بررسی و فیلتر کردن متن های درج شده، این متن رو در خروجی سایت خودش بزنه.






حالا در صورتی که کاربر این صفحه وب را مشاهده کند، هکر، کوکی کاربر را سرقت می کند.

راه جلوگیری از این نوع هک اینه که سایتها، ورودی های کاربر رو با ابزارهای مختلفی که دارند (مانند regular expressionها و..) چک کنند و مطمئن بشن که کاربران کدمخرب وارد نمیکنند.یا اینکه از ابزارهای زبان برنامه نویسی استفاده کنند. مثلا در php توابع htmlentities,htmlspecialchars  و strip_tags برای این کار در نظر گرفته شده اند. که مثال زیر استفاده htmlentities را نشان می دهد.






CSRF

=============

فرض کنید سایتی به اسم sms.com داریم که داخل این سایت ، پس از اینکه کاربر لاگین کرد، برای ارسال پیامک به صفحه sms.com/send.php  میرود.
فرض کنید که ساختار صفحه ارسال پیامک به صورت زیر باشد:






اگر صفحه do_send.php درخواست
Sms.com/do_send.php?number=09360123456&message=hello 
را بپذیرد، می توان از این سایت با استفاده از csrf سوء استفاده کرد.معمولا این گونه حملات با فریب کاربر برای دیدن یک تصویر انجام می پذیرد. به تگ زیر دقت کنید:




کاربر با کلیک برای دیدن تصویر، ناخودآگاه درخواست ارسال پیامک را ارسال کرده است.روشهای زیادی برای حملات csrf وجود دارد اما معمول ترین روش استفاده از تصاویر است. این لینک و تصویر میتواند توسط ایمیل ارسال شده باشد یا همان روش قبل در یک سایت که داده های وارد شده توسط کاربران را چک نمیکند، در خروجی سایت قرار گرفته باشد.

برای جلوگیری از حملات CSRF معمولا این چهار روش پیشنهاد میشود:

1-در فرم های خود بجای متد GET از متد POST استفاده کنید

2-بجای تکیه بر Register_global از $_POST استفاده کنید

3-کاربران را مجبور به استفاده از فرم های خود کنید. این کار با استفاده از captcha قابل انجام است.

4-برای اعمال حساس verification را دوباره انجام دهید.


یک مثال واقعی

=============

در سال 2006 آقای شیفلت متوجه یک نقص امنیتی در سایت آمازون شد.
ایشان این مسئله را به مسئولان اطلاع دادند.جزئیات این نقص امنیتی در سال 2007 منتشر شد و در اختیار همگان قرار گرفت .شما می توانید این جزئیات را در آدرس زیر مشاهده کنید:

http://shiflett.org/blog/2007/mar/my-amazon-anniversary

 


 

نظرات   

 
#3 الی 1396-10-03 18:29
استفاده کردم. ممنون از وقتی که گذاشتی
نقل قول
 
 
#2 alireza 1395-08-21 07:40
خیلی عالی بود ممنون
نقل قول
 
 
#1 انجمن لاراول 1394-03-12 19:31
مرسی مقاله ی خیلی جالبی بود
نقل قول
 

اضافه کردن نظر


کد امنیتی
تغییر کد امنیتی