PDA

View Full Version : در استفاده از cookie چه نکاتی را رعایت کنم؟



reza-alborz
سه شنبه 31 شهریور 1394, 14:29 عصر
سلام و احترام

من از کوکی برای لاگین استفاده میکنم (بخاطر remember) ، حال هنگام لاگین بعد از تشخیص درست بودن فیلد در بانک اطلاعاتی یک کوکی مثلا با نام username میسازم به مدت یک ماه و بعدا در صفحات مختلف میگم که اگر همچین کوکی وجود داشت این صفحه حفظ بشه ، حالا سوالم اینه که اگر یک کاربری بیاد بصورت دستی کوکی درست کنه چی میشه ؟؟؟ در کل باید چه نکاتی رو رعایت کنم . از اساتید و برنامه نویسان باتجربه درخواست راهنمایی دارم. تشکر

arenaw
سه شنبه 31 شهریور 1394, 15:42 عصر
سلام. برای این کار باید از سشن استفاده کنی.

reza-alborz
سه شنبه 31 شهریور 1394, 16:15 عصر
در سشن با هر بار بستن پنجره اطلاعات ورود از بین میره

Unique
سه شنبه 31 شهریور 1394, 18:09 عصر
سلام. برای این کار باید از سشن استفاده کنی.
دوستان دقت کنین session هم همون کوکیه و فقط محتواش سمت سرور ذخیره میشه.


در سشن با هر بار بستن پنجره اطلاعات ورود از بین میره
خیر توی سشن هم میشه گفت سشن برای مدت بیشتری بمونه

اما به نظر من همون استفاده از کوکی را انجام بدین.
من خودم باشم از این روش استفاده میکنم :
هر وقت کاربر درخواست به خاطر سپردنش توی سیستم را کرد یک جدول برای این کاربران در نظر میگیرم و علاوه بر شماره رکورد نام کاربریش توی جدول کاربر ها (نام کاربری زیاد جالب نیست وقتی میشه از id استفاده کرد) و مدت زمان اعتبار ، یک token هم براش میسازم این token مثلا ۳۰۰۰ بار sha1 شده (یا md5 شده) رشته "زمان درخواست +‌IP زمان درخواست + نام کاربری + یک مقدار تصادفی" هست.
حالا روی سیستمش مقدار token و id نام کاربریش را توی کوکی ذخیره مکینم و اگه این کاربر بیاد با توجه به مقادیر ذخیره شده روی کوکی و جدول خودم تشخیص میدم باید دسترسی بدم یا نه (در واقع احراز هویتش میکنم بجای لاگین). چون اینجا دو تا پارامتر داریم و یکیش هم token قدرتمندی هستش تقریقا همونقدر که ممکنه الان خرس شما را پشت کامپیوتر بخوره امکان داره کسی این دو تا را حدس بزنه.

برای امنیت بیشتر :
۱ - اگه کاربری token ی فرستاد که مخالف token واقعی اون شماره رکورد کاربری بود کلا اون درخواست یاداوری را حذف میکنم (اینطوری دوست هکرمون فقط یکبار میتونه این دو کوکی را حدس بزنه و از خرس به دایناسور میرسیم.)
۲ - از SSL استفاده میکنم که کسی نتونه hijack کنه مقادیر رد و بدل شده را
۳ - مرورگر های قدیمی که مشکلات امنیتی دارند مثل IE7 و 8 و Opera قدیمی و حتی firefox و chrome خیلی قدیمی را اجازه یادآوری نمیدم و چاپ میکنم دوست عزیز شما به خاطر مرورگرت لیاقت یادآوری نداری.

اینجوری شما تا ۹۹٪ امنی و اون ۱ درصد هم مال خداست.

reza-alborz
چهارشنبه 01 مهر 1394, 07:26 صبح
عذر میخوام تو سشن چطوری میشه گفت برای مدت بیشتری بمونه ؟

reza-alborz
چهارشنبه 01 مهر 1394, 07:30 صبح
unique عزیز ، راه حلی که گفتین عالیه ، فقط یه مشکل آی پی مگه تغییر نمیکنه؟ و مشکل حجم بانک اطلاعاتی چی ؟ برای مثال در یک سایت پر بازدید شاید در روز 1000 نفر این درخواست رو دادن

Unique
چهارشنبه 01 مهر 1394, 18:00 عصر
عذر میخوام تو سشن چطوری میشه گفت برای مدت بیشتری بمونه ؟
اقا من حواسم پرت صحبت arenaw شد و اشتباه کردم. میشه session را کشش داد اما نمیشه کار یکرد که چند روز یا ماه بدونم اینکه بازدیدی باشه بمونه.


فقط یه مشکل آی پی مگه تغییر نمیکنه؟
مثل اینکه درست متوجه نشدین ! ما قرار نیست هر بار token را ایجاد و بررسی کنیم که. یکبار ایجادش میکنیم و دفعات بعدی توی database فقط چک میکنیم اون token وجود داره یا نه. اینکه من Ip را توی رشته آوردم برای پیچیده کردن فرآیند تولید token بود و اگه دوست داری اصلا ip را قرار نده اما اهمیتی نداره ! هر چی رشته پیچیده تر باشه بهتره. هر چی رشته با عوامل دینامیک بیشتری تبدیل به token باشه قدرتمند تره ! همین


و مشکل حجم بانک اطلاعاتی چی ؟ برای مثال در یک سایت پر بازدید شاید در روز 1000 نفر این درخواست رو دادن
خوب بدن ! میشه ۱۰۰۰ تا رکورد با سه فیلد کد کاربری و token و تاریخ انقضا روی هم چند بایت ناقابل. تازه هر روز هم که بیشتر نمیشه . ماکسیموم تعداد رکورد ها برابر با رکورد های جدول کاربران هستش. اصلا حجمی نمیگیره. خیالت راحت.

reza-alborz
چهارشنبه 01 مهر 1394, 18:05 عصر
آقا متوجه شدم بطور کامل ، ممنون انشالله که روش خوبی باشه

reza-alborz
چهارشنبه 01 مهر 1394, 18:08 عصر
فقط ببخشید یک سوال دیگه ، ما باید دو کوکی مجزا یکی برای id و دیگری برای token بسازیم دیگه؟

reza-alborz
چهارشنبه 01 مهر 1394, 18:41 عصر
آقا شرمنده خیلی سوال کردم ببخشید ، کاربری که این کوکی ها رو در سیستمش ثبت کرد ، حال اگر کسی بیاد اطلاعات این کوکی رو برداره از سیستم کاربر و بره بصورت دستی کوکی با این مشخصات در سیستم خودش درست بکنه چی میشه؟

H:Shojaei
چهارشنبه 01 مهر 1394, 19:27 عصر
فقط ببخشید یک سوال دیگه ، ما باید دو کوکی مجزا یکی برای id و دیگری برای token بسازیم دیگه؟
باید جدا باشن دیگه...
cookie[id]=$id, cookie[token]=$token

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

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

Unique
چهارشنبه 01 مهر 1394, 23:03 عصر
گر مقادیر کوکی ها با مقادیر داخل رکورد مربوطه یکی بود یک سشن واسه کاربر همونجا بسازیم و از اون به بعد با این سشن چک کنیم که کاربر وارد شده یا خیر دیگه درسته؟ که اینطوری بار اول که سشن تولید میشه اعتبار داره تا وقتی که مرورگرش رو ببنده باز که وارد بشه همین کار تکرار میشه اینطوری مکرر نیاز به چک کردن دیتابیس نیست تو صفحات مختلف

بله درسته.
کلا وقتی احراز هویت کردیم از اونجا به بعد میتونیم مثل وقتی رفتار کنیم که نام کرابری و گذرواژه را درستیش را چک کردیم ! معلومه که برای نام کاربری و گذرواژه هر بار این کار را انجام نمیدیم.

reza-alborz
پنج شنبه 02 مهر 1394, 09:56 صبح
ممنون از دوستان گلم