تالار گفتمان nCIS.ir

نسخه‌ی کامل: کاریرد های CSRF
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
دوستان csrf چه کاربردی داره؟
یکی از کاربرد هاش اگه اشتباه نکنم اینه:
جلوگیری از دسترسی فرم های ajax از خارج آن
---
و یه مورد دیگ اینکه فرض کنیم توی یه فرم از csrf استفاده کردیم؛ چون ما از sessions برای ایجاد csrf استفاده میکنیم، کاربر میاد صفحه ی فرم رو باز میکنه و حالا 15 دقیقه یا بیشتر صفحه رو باز نگه میداره بعد از 15 دقیقه که میخواد بیاد فرم رو ارسال کنه با پیام خطا مواجه میشه. خب این بد نیست؟
---
توی yii من دقت که کردم csrf رو توی meta گذاشته خب این چه کاربردی داره؟ چرا این کارو کرده؟ در این باره هم توضیح بدید ممنون میشم
البته CSRF که خودش حمله است. اون چیزی که مدنظر شماست فکر کنم CSRF Protection باشه که راههای مختلفی داره و یکی از راههای معمولش قراردادن یک عنصر با مقدار تصادفی توی فرم و نگه داشتنش سمت سرور توی سشن هست. برای مواردی هم که گفتین (غیرفعال شدن سشن بعد از 15 دقیقه و...) هم راه حل وجود داره. یکیش تنظیم عمر سشن به مدت بیشتره و یکی دیگه اینکه پشت پرده هر چند دقیقه یکبار یه درخواست با AJAX به سرور بفرستیم (این درخواست هیچ کاری نمیکنه و فقط میخوایم به سرور بگیم که کلاینت زنده است).

اطلاعاتی هم که توی تگ متا گذاشته میشه برای سرور توی هدر درخواست ارسال میشه و Yii از اونجا توکن CSRF خودش رو میخونه.
چطوری اطلاعات meta فرستاده میشن با header? برا من که نیومد
اگه توی صفحه شما نه لینکی باشه که CSRF بهش اضافه بشه نه فرمی که داخلش توکن رو بگذاره، به متا اضافه میکنه. البته منم جایی خوندم و خودم تست نکردم و ندیدم اضافه بشه.
توی فرم پیش فرض yii (تماس با ما) csrf رو هم توی متا گذاشته هم توی hidden input، چرا؟! گذاشتنش تو متا چه فایده ای داره؟ اینو من متوجه نشدم چون اطلاعات متا رو نمیشه دریافت کرد
این لینک رو بخونید: http://stackoverflow.com/questions/21473...-in-cookie

همینطور این یکی رو: http://www.codedisqus.com/0SHeXkUWPg/why...ookie.html

این هم یک نمونه عملی که داره ازش استفاده میکنه (البته با فریمورک لاراول هست ولی خوب توضیح داده) : http://laravel.io/forum/03-20-2014-good-...en-to-html

بطور خلاصه، بدرد Javascript میخوره. وقتهایی که فرم رو با AJAX میخواین سابمیت یا Validate کنین، لازم نیست توی فرم دنبالش بگرده و مستقیماً از توی تگ متا توکن رو میخونه و توی درخواستها میفرسته.
خب درست با جاوا اسکریپت میشه این کارو کرد ولی یه مورده دیگ ای هم هستش، خب اسپمر با همون جاوا اسکریپت هم میتونه اسپم کنه یا حتی با php هم خیلی راحت میشه اسپم کرد خیلی راحت محتویات csrf خونده میشه، پس این csrf به چه دردی میخوره؟
بعد یه سوال دیگ که توش شک دارم، با فعالیت کاربر توی سایت session های خوده php یا کوکی ها غیر فعال نمیشن؟
این توکن هربار عوض میشه.

درمورد سؤالتون هم متوجه منظورتون نشدم. کلاً فعالیت کاربر نیازمند سشن هست. سشن هم برای کارکرد صحیح به کوکی احتیاج داره در حالت پیشفرض. حالا چطور ممکنه فعالیت کاربر بخواد سشنها و... رو بهم بریزه، نمیدونم.
خب مام هربار که میخوایم اسپم کنیم این توکن رو بدست میاریم طبیعتا!!!
واسه session خوده php هم من تست کردم اگه 0 باشه تا زمانی که مرورگر بسته نشده باقی میمونه در غیر این صورت کاربر چه توی سایت باشه چه خارجش session از بین میره مگه اینکه خودمون دستی setcookie کنیم.
شما هرجوری کار کنید، بهرحال باید توکن رو توی صفحه بگذارین تا توسط صفحه ارسال بشه. مهم اینه که با این کار، اولاً جلوی ارسال فرم توسط سایتهای دیگه گرفته میشه و ثانیاً اگه بخوان Bruteforce حمله کنن، باید برای هر دفعه دوبار درخواست بدن. یکبار صفحه رو بگیرن و بخونن و کد رو استخراج کنن (که خودش پردازش لازم داره) و یکبار دیگه هم برای اینکه مقادیر خودشون رو سابمیت کنن. هدف CSRF Protection حذف کامل امکان ارسال نیست چون اصلاً امنیت صددرصد معنا نداره بلکه هدفش سخت کردن و لزوم مشاهده سایت هست. حداقل اینطوری 2 مزیت دارین: یکی اینکه آمار سایتتون هم بالا میره چون ویزیت محسوب میشه و یکی دیگه اینکه اطلاعات Agent و IP و... ویزیتورها (شامل نفوذگر) رو میتونید لاگ کنید و داشته باشین تا درصورت نیاز به کمک فایروال مسدودش کنید.

یکی دیگه از راههای امنیت CAPTCHA هست که زیاد توصیه نمیشه چون سادگی توکن رو نداره و کاربر هم اذیت میشه اگه بخواد هر کاری انجام بده، کد امنیتی نشونش بدیم ولی بسته به میزان اهمیت و امنیت سایتتون، ممکنه توی بعضی سناریوها لازم باشه طرف آب هم میخوره، کد امنیتی رو بگه.
درسته csrf کارو یکم سخت تر میکنه، ممنون
نگاه کنید تصور غلطی نداشته باشید از CSRF یا Cross-Site Request Forgery

حمله csrf برای زمانی است که کاربر شما وارد سیستم شده و مراحل احراز حویت را پشت سر گذاشته و همچنین برای همه موارد مورد نظر ما نیست.

مثلا کاربر A وارد سیستم می شود.

در صورتی که به آدرس example.com/?action=delpost&id=2 برود پست شماره 2 حذف خواهد شد. حال در هر صورتی من کاربر A را به این ادرس هدایت کنم با شناسه دیگر چه اتفاقی رخ می دهد ؟

قطعا پست کاربر حذف خواهد شد. این میتونه همه موارد را شامل بشود!

حال اگر من یک برای انجام عملیات حذف پست یک توکن تصادفی (یک رمز تصادفی) بخواهم دیگر کسی از این توکن با خبر نخواهد بود و در صورت ارسال کاربر A به آدرس example.com/?action=delpost&id=2 با خطای توکن امنیتی اشتباه است مواجه خواهم شد.