كوكي يا سسشن؟ لطفا كمك كنيد

Ahmad.khaliq

New Member
سلام دوستان!
راجع به سوالي كه از شما مي پرسم، قبلا هم تحقيق كرده ام. هم كتاب خوندم و هم گوگل كردم.
از شما خواهش ميكنم فقط جوابهاي صحيح و حرفه اي بگيد؛ و اگر جوابتون آماتوري هست، جوابي نفرستيد.
ممنون!

و اما مشكل...!
من سايتي براي دانشگاه خودم طراحي كردم كه قرار است 4000 نفر عضو ثابت داشته باشه( يعني همه دانشجويان)
و احتمالا در روز 500 كاربر ثبت نام شده به سايت سر ميزنند.
در اين سايت قرار است برخي از امور مالي دانشگاه و انتقال وجه انجام بشه و به همين خاطر امنيت اين سايت براي من خيلي مهمه.

شيوه ورود كاربران عضو شده به سايت به صورت زير است:

1- كاربران ، نام كاربري و رمز عبور را از طريق فرم به صفحه login.php ارسال ميكنن.
2- صفحه login.php به صورت زير عمل ميكنه:

PHP:
<?php
// Get Information
$User=$_POST['UserName'];
$Pass=$_POST['Password'];
// اين مقادير را از پايگاه داده بيرون ميكشد
// اگر موجود بود، آي دي كاربر را برميگرداند
if (DataBase)
{
 setcookie("userid",$db['id']);
}
else
{
 print"Sorry!";
}
?>

از اين به بعد در همه صفحات سايت از مقدار داخل كوكي(userid) براي شناسايي كاربر استفاده ميشه. مثلا وقتي كاربر ميخواد مقاله ارسال كنه، سيستم براي ذخيره نام ارسال كننده مقاله، مقدار داخل كوكي را بيرون ميكشه و در بانك اطلاعات ذخيره ميكنه.

به طور كلي در ابتداي تمامي صفحات سايت ، سيستم به صورت زير عمل ميكنه:

PHP:
<?php
if (isset($_COOKIE['userid'])
{
 // Loged In
}
else
{
 //Send User to Login form
}
?>

اما سوالات من اينه..!
1- استفاده از كوكي براي ذخير id كاربر چقدر ميتونه خطرناك باشه؟
2- آيا اگر از Session استفاده كنم به سرور من فشار مياد؟
3- سيستم هاي بزرگ مثل (PHPBB - Vbultin-Joomla) از چه روشي استفاده ميكنن؟
4- شما به عنوان يك برنامه نويس حرفه اي، براي اسن سيستم كدام روش رو ژيشنهاد ميكنيد؟ كوكي يا session ؟
-...
-...
 

yakoza

Well-Known Member
1- استفاده از كوكي براي ذخير id كاربر چقدر ميتونه خطرناك باشه؟
فکر نمیکنم زیاد خطرناک باشه چون با داشتن user کاری که نمی تونن بکنن اگرم می خوایی امنتر باشه به صورت md5 ذخیرش کن

آيا اگر از Session استفاده كنم به سرور من فشار مياد؟
مثلما اگه تعداد یوزرهات زیاد باشه آره البته یه راهی هم هست که سشنها رو تو دیتابیست ذخیره کنی

3- سيستم هاي بزرگ مثل (PHPBB - Vbultin-Joomla) از چه روشي استفاده ميكنن؟
چون با هیچ کدوم کار نکردم نمیدونم ولی این جور که معلومه Vbultin داره از کوکی استفاده میکنه

4- شما به عنوان يك برنامه نويس حرفه اي، براي اسن سيستم كدام روش رو ژيشنهاد ميكنيد؟ كوكي يا session ؟
بسته به نیازت هر کدوم یه جا جواب میده
ولی اگه شما فقط می خوایی یوزر رو ذخیره کنی من کوکی رو پیشنهاد میکنم
 

Y.P.Y

Well-Known Member
1- استفاده از كوكي براي ذخير id كاربر چقدر ميتونه خطرناك باشه؟
با دوستمون Yakoza موافقم. ولی اگر User/Id رو هم مخفی کنید بهتره(بخاطر حملات Crack، Brute force و...).
2- آيا اگر از Session استفاده كنم به سرور من فشار مياد؟
به هیچ وجه. این نرم افزارتون هست اگر درست و استاندارد نوشته نشه به سرور فشار میاره!
3- سيستم هاي بزرگ مثل (PHPBB - Vbultin-Joomla) از چه روشي استفاده ميكنن؟
Joomla که هیچی، داره برکنار میشه! ولی بقیه از Session استفاده می کنن.
Session رو Server ذخیره میشه ولی Cookie رو Client! پس امنیتش خیلی بیشتره.
4- شما به عنوان يك برنامه نويس حرفه اي، براي اسن سيستم كدام روش رو ژيشنهاد ميكنيد؟ كوكي يا session ؟
حقیر Session رو.
 

Ahmad.khaliq

New Member
سلام دوست عزيز
خيليي ممنون كه پاسخ داديد

فکر نمیکنم زیاد خطرناک باشه چون با داشتن user کاری که نمی تونن بکنن اگرم می خوایی امنتر باشه به صورت md5 ذخیرش کن

اما من فكر ميكنم خطرناك باشه! چون مثلا وقتي من لاگين ميكنم، id من ذخيره ميشه توي كوكي؛ و از اون به بعد هرچه مقاله توي سايت ارسال كنم و يا كامنت بزارم، سيستم همون آي دي توي كوكي رو به عنوان آي دي من شناسايي ميكنه و من رو به عنوان نويسنده مقاله يا كامنت شناسايي ميكنه؛ حالا مثلا اگه من به عنوان هكر به جاي id خودم (مثلا 13 باشه) يه آي دي ديگه توي كوكي ذخيره كنم و مثلا بزارم (10) ؛ از اين به بعد من به عنوان كاربر شماره 10 شناسايي ميشم. اينطور نيست؟ من راجع به اين موضوع زياد مطمئن نيستم. نظر شما چيه؟
 

Ahmad.khaliq

New Member
دوست عزيز Y.P.Y
اگه فرض كنيم هاست من 100 مگ فضا داشته باشه و 5 گيگ پهناي باند؛ و حدودا 500 كاربر (عضو شده) به سايت من سر بزنن، استفاده از session مشكلي ايجاد نميكنه؟ اصلا هر سسشن چقدر فضا اشغال ميكنه؟
 

parsiteam

Member
این روشی که شما استفاده کردی خدای باگه که :shock:

طبق این بررسی :
PHP:
<?php
if (isset($_COOKIE['userid'])
{
 // Loged In
}
else
{
 //Send User to Login form
}
?>
الان کافیه که من با خود مرورگرم یک کوکی با نام userid با یک شماره خاص بسازم . اینطوری من راحت شناسی میشم و وارد سیستم میشم . به نظر من بهتره هم یوزر و هم پسورد رو به صورت هش شده حالا چه MD5 چه توابع دیگر اونم به صورت خیلی پیچیده ذخیره کنی و هر دو تا رو چک کنی .
 
آخرین ویرایش:

میلاد

Member
سلام
نظر من اینه که یوزر و پسورد (هش شده) توی کوکی بزار و هر جا لازم شد با دیتا بیس مقایسه کن.
 

ziXet

مدیر انجمن PHP/MYSQL
vbulletin از هردوش استفاده میکنه!
شما از کوکی برای remember me استفاده کن و از سشن برای کنترل کاربر در سایت!
به نظر من اگه سشن رو تو دیتابیس ذخیره کنی بهرته چون کنترل خیلی خوبی میتونی روش داشته باشی
 

I.NoBody

Active Member
من هیچ کدوم از وب سایت مالی و یا دروازه های خرید رو ندیدم که از کوکی استفاده کنند.
در مورد کار شما هم پیشنهاد میدم از سشن با تایم کوتاه مثلاً (15 دقیقه) استفاده کنید.
در مورد دلایلش هم دوستان توضیحات خوبی دادند.
ضمناً جوملا در حال برکنار شدن نیست. بلکه در حال رشد نسخه های 1.5 و عدم ادامه نسخه های 1.0 هست.
 

25mordad

Member
بابا ایول همه اهل فن جواب دادن .. ما دیگه چیزی نمونده جواب بدیم .. ولی جدا از شوخی :
به نظر منم روشت برای لوگین خیلی جالب نیست
کوکی رو فقط برای ورود و لوگین استفاده کن و
بعدش که لوگین کاربر تایید شد بفرست تو سشن
 

Ahmad.khaliq

New Member
از همه دوستان عزيز ممنونم

يك سوال ديگه هم دارم!

اگر براي ثبت كوكي از فرمت پيشنهادي خود PHP استفاده كنم چطوره؟


PHP:
bool setcookie ( string $name [, string $value [, int $expire=0 [, string $path [, string $domain [, bool $secure=false [, bool $httponly=false ]]]]]] )

توضيحات كامل اين روش در اين آدرس موجوده:
http://ir.php.net/setcookie

همونطور كه ميبينيد توي اين روش ژارامتري به نام domain ثبت ميشه كه احتمالا اجازه نميده كوكي دامين هاي ديگه استفاده بشه.
همينطور پارامتري به نام httponly هم وجود داره كه اگر مقدار اوت ترو باشه، ديگه اجازه نميده كه كدهاي جاوا بهش دسترسي داشته باشن.

فكر ميكنيد اگه براي ثبت كوكي از اين روش استفاده كنم خوبه يا همگي معتقديد كه سسشن بهترين راه؟

ممنون ميشم اگه جواب بديد.
 

ziXet

مدیر انجمن PHP/MYSQL
از همه دوستان عزيز ممنونم

يك سوال ديگه هم دارم!

اگر براي ثبت كوكي از فرمت پيشنهادي خود PHP استفاده كنم چطوره؟


PHP:
bool setcookie ( string $name [, string $value [, int $expire=0 [, string $path [, string $domain [, bool $secure=false [, bool $httponly=false ]]]]]] )

توضيحات كامل اين روش در اين آدرس موجوده:
http://ir.php.net/setcookie

همونطور كه ميبينيد توي اين روش ژارامتري به نام domain ثبت ميشه كه احتمالا اجازه نميده كوكي دامين هاي ديگه استفاده بشه.
همينطور پارامتري به نام httponly هم وجود داره كه اگر مقدار اوت ترو باشه، ديگه اجازه نميده كه كدهاي جاوا بهش دسترسي داشته باشن.

فكر ميكنيد اگه براي ثبت كوكي از اين روش استفاده كنم خوبه يا همگي معتقديد كه سسشن بهترين راه؟

ممنون ميشم اگه جواب بديد.
ظاهرا شما نفهمیدی که بچه ها چی گفتن!
شما ID و pass کاربرو هش میکنی به صورت خفن بعد تو کوکی ست میکنه!
این برای لوگین کردن کاربر خوبه
اما بعد از لوگین کاربر شما باز هم ID و pass رو با همون روش یا روش دیگه هش میکنی میذاری تو سشن.
اگه سشن تو db باشه بهتره
سشن ها رو هم هر وقت کاربر وارد یه صفحه میشه زمانشو آپدیت میکینی
بعد یه فانکشن مخصوص دیلیت کردن سشن ها expired شده میذاری!
یعنی یه کوئری میگیری که هر سشنی که زمانش از یه حد کمتر بود باطل کنه
برای مدیریت زمان تو دیتابیس هم از ()time استفاده کن

از اون چیزایی هم که گفتی میتونی واسه امنیت کوکی استفاده کنی

موفق باشی
 

Ahmad.khaliq

New Member
شما ID و pass کاربرو هش میکنی به صورت خفن بعد تو کوکی ست میکنه!
این برای لوگین کردن کاربر خوبه
اما بعد از لوگین کاربر شما باز هم ID و pass رو با همون روش یا روش دیگه هش میکنی میذاری تو سشن.
اگه سشن تو db باشه بهتره
سشن ها رو هم هر وقت کاربر وارد یه صفحه میشه زمانشو آپدیت میکینی
بعد یه فانکشن مخصوص دیلیت کردن سشن ها expired شده میذاری!
یعنی یه کوئری میگیری که هر سشنی که زمانش از یه حد کمتر بود باطل کنه
برای مدیریت زمان تو دیتابیس هم از ()time استفاده کن

ممنون!
اگه ميشه از چيزاييي كه گفتين يه مثال كوچولو هم با كد بزاريد؛ آخه خيلي خلاصه گفتي و من تقريبا نفهميدم!:paint:
 

as13851365

New Member
شما همان کاری را که در پست 12 گفتید را انجام بدید خیلی بهتر است برای شناسایی کاربر هم شما آی دی کاربر را در کوکی ذخیره کن و بعد مثلا نام کاربر و آی دی کاربر را دوباره با استفاده از تابع md5 در کوکی ذخیره کن بعد با استفاده از آی دی ذخیره شده در کوکی کاربر را شناسایی کن و بعد ببین آیا نام کاربر و آی دی را که به صورت md5 هستش با md5 داخل دیتابیس برابر است یا نه اگر برابر بود بدون که کاربر خودش هست در غیره این صورت یعنی اگر آی دی کاربر برابر بود ولی نام کاربر و آی دی که به صورت md5هست برابر نبود به کاربر اخطار بده ...

درباره بهتر بودن سیشن و یا کوکی هم که کلا همه چیز دست خود برنامه نویس است یعنی اگر برنامه نویس خیلی قشنگ کد نویسی کنه هم کوکی و هم سیشن می تونه امنیت سایت را تضمین کنه ولی اگر به صورت دست و پا شگسته کد نویسی کرده باشه مطمئن باشن که بهترین روش ها هم برای اون سایت کارساز نخواهد بود.
 

جدیدترین ارسال ها

بالا