امنیت برای مدیر سایت

masima

Member
سلام
من دنبال یک الگوریتم و روش بسیار خوب توی لاگین مدیر سایت هستم ؛ و در این زمینه یک سری سوال هم دارم :

1) بهتره امکان عوض کردن نام کاربری و رمز عبور برای مدیر سایت وجود داشته باشه یا نه؟ منظورم اینه که آیا اطلاعات مدیر بهتره توی پایگاه داده ذخیره بشه یا اینکه ثابت باشه ؟

2) جدا بودن صفحه لاگین مدیر از دیگران به نظرتون خوبه ؟ و مکان این صفحه بهتره کجا باشه ؟

3) یک الگوریتم خوب و قوی که فکر همه جا مثل اینجکشن و ذخیره سشن در پایگاه داده و بهترین نوع hash , sha ... رو سراغ دارید بهم معرفی کنید ؟

اگه مورد دیگه ای از امنیت رو جا انداختم ؛ خوشحال میشم منو راهنمایی کنید

سپاسگزارم
 

Domanjiri

Well-Known Member
سلام

چون منابع فراوونی برای این موضوع روی وب هست، من چنتا لینک براتون میذارم و ازتون می خوام که خودتون هم همت کنید و چند دقیقه ای از وقتتون رو با گوگل بگذرونین!

این لینک توی لینک های مهم بخش آموزش همین انجمن خودمون بود
روشهاي برنامه نويسي امن درphp

بخش امنیت انجمن ایران iranphp.org
نکته : منبع فارسی هم فراوون پیدا میشه، مثلن یه سری مقاله توی سایت ایران پی اچ پی بود که می تونست بدردتون بخوره ، متاسفانه من مطالب لینک های بالا رو نخوندم و نمی تونم نظری بدم ولی قطعن افراد با سوادی اونها رو تهیه کردند و...

Secure Website Login Programming with PHP & MySQL

PHP Secure Login Tips And Tricks

Enhance Security Hash Function For Web Development

A Complete, Secure User Login System


و قص علی هذا...(!)

موفق باشین
 

masima

Member
Doman جان ؛ راستش من هنوز همه منابعی که معرفی کردی ؛ نخوندم ! :green: ولی تا یه حدی پیشرفت کردم ؛

از همه یک سوال دارم :

فرض کنید کاربر 1 با نام user1 و رمز pass1 که معتبرند ؛ وارد سامانه ( همون سیستم ! ) میشه ؛ بعد مدتی کاربر 2 با همون نام و رمز و از یک مرورگر دیگه می خواد وارد بشه ؛ حالا باید چه اتفاقی بیوفته ؟ (اگه گفتی ؟ ! :green: )
دقیقتر بگم : باید چی کار کنم ؟

1) به کاربر 2 هشدار بدم ؟ (چه هشداری ؟ )
2) کاربر 1 باید چه اتفاقی براش بیوفته ؟ برای سشن کاربر 1 چی ؟ و همین طور برای سشن کاربر 2 ؟

فرض کنید برای کاربر 1 بالای سایت نوشته : خوش آمدید user1 . حالا اگه کاربر 1 برای خودش تو سایت بگرده ؛ تکلیفش چیه ؟ باید خروج ناگهانی براش اتفاق بیوفته ؟ یا ...

می خوام راه درست رو بدونم ؟ اگه میشه راهنمایی کنید !

می دونید ؛ در حال حاضر سیستمی که دارم اینجوریه : کاربر 1 به فعالیت خودش ادامه میده ؛ کاربر 2 با همون اطلاعات لاگین کاربر 1 ؛ لاگین میکنه ؛ اون هم فعالیت خودش رو شروع میکنه ! ؛ سشن های هر کدوم هم به تنهایی به فعالیت خودشون ادامه میدن !! :shock:
این یعنی فاجعه !
 

phpweb

Active Member
1) بهتره امکان عوض کردن نام کاربری و رمز عبور برای مدیر سایت وجود داشته باشه یا نه؟ منظورم اینه که آیا اطلاعات مدیر بهتره توی پایگاه داده ذخیره بشه یا اینکه ثابت باشه ؟
خب اگه امکان تغییر کلمه رمز توی سیستم وجود نداشته باشه، و مدیر کلمه رمزش رو فراموش کنه چی می شه؟ یا اصلا مدیر بخواد کلمه رمزش رو هر هفته عوض کنه.
2) جدا بودن صفحه لاگین مدیر از دیگران به نظرتون خوبه ؟ و مکان این صفحه بهتره کجا باشه ؟
بنظرم بهتره که جدولی که اطلاعات مدیران و کاربرها رو نگه داری می کنه جدا باشه.
3) یک الگوریتم خوب و قوی که فکر همه جا مثل اینجکشن و ذخیره سشن در پایگاه داده و بهترین نوع hash , sha ... رو سراغ دارید بهم معرفی کنید ؟
باید به کلمه رمز یه رشته دلخواه اضافه کنید و بعد یک یا دوبار از الگوریتمهایی مثل sha استفاده کنید.
 

phpweb

Active Member
doman جان ؛ راستش من هنوز همه منابعی که معرفی کردی ؛ نخوندم ! :green: ولی تا یه حدی پیشرفت کردم ؛

از همه یک سوال دارم :

فرض کنید کاربر 1 با نام user1 و رمز pass1 که معتبرند ؛ وارد سامانه ( همون سیستم ! ) میشه ؛ بعد مدتی کاربر 2 با همون نام و رمز و از یک مرورگر دیگه می خواد وارد بشه ؛ حالا باید چه اتفاقی بیوفته ؟ (اگه گفتی ؟ ! :green: )
دقیقتر بگم : باید چی کار کنم ؟

1) به کاربر 2 هشدار بدم ؟ (چه هشداری ؟ )
2) کاربر 1 باید چه اتفاقی براش بیوفته ؟ برای سشن کاربر 1 چی ؟ و همین طور برای سشن کاربر 2 ؟

فرض کنید برای کاربر 1 بالای سایت نوشته : خوش آمدید user1 . حالا اگه کاربر 1 برای خودش تو سایت بگرده ؛ تکلیفش چیه ؟ باید خروج ناگهانی براش اتفاق بیوفته ؟ یا ...

می خوام راه درست رو بدونم ؟ اگه میشه راهنمایی کنید !

می دونید ؛ در حال حاضر سیستمی که دارم اینجوریه : کاربر 1 به فعالیت خودش ادامه میده ؛ کاربر 2 با همون اطلاعات لاگین کاربر 1 ؛ لاگین میکنه ؛ اون هم فعالیت خودش رو شروع میکنه ! ؛ سشن های هر کدوم هم به تنهایی به فعالیت خودشون ادامه میدن !! :shock:
این یعنی فاجعه !
وقتی کاربر لاگین کرد، توی یه فیلد از جدول این رو مشخص کن و زمان لاگین ور هم مشخص کن.

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

Army.Hidden

Active Member
سلام
البته میتونید برای نشست توی سایت زمان تعیین کنید.
مثلا فقط 20 دقیقه Session معتبر باشه .
 

masima

Member
خب اگه امکان تغییر کلمه رمز توی سیستم وجود نداشته باشه، و مدیر کلمه رمزش رو فراموش کنه چی می شه؟ یا اصلا مدیر بخواد کلمه رمزش رو هر هفته عوض کنه.
بهم این مورد توصیه شده ! منظورم مثل سامانه ورود ویندوز هست .. و داشتن مدیر ارشد و مدیر معمولی
باید به کلمه رمز یه رشته دلخواه اضافه کنید و بعد یک یا دوبار از الگوریتمهایی مثل sha استفاده کنید.
فکر میکنم با جستجو هایی که انجام دادم به یک الگوریتم خوب رسیدم !

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

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

و یک نکته دیگه : این یعنی همیشه اولین کسی که لاگین میکنه رو باید به رسمیت بشناسم ؟ ! این درسته ؟
 

masima

Member
سلام
البته میتونید برای نشست توی سایت زمان تعیین کنید.
مثلا فقط 20 دقیقه session معتبر باشه .
در حالت کلی می گید این رو ؟
چون من نمی تونم ارتباطی بین مطلب شما و سوال خودم در مورد لاگین دو کاربر نام برده پیدا کنم ؟ ! میشه بیشتر توضیح بدید ؟
 
آخرین ویرایش:

phpweb

Active Member
بهم این مورد توصیه شده ! منظورم مثل سامانه ورود ویندوز هست .. و داشتن مدیر ارشد و مدیر معمولی

فکر میکنم با جستجو هایی که انجام دادم به یک الگوریتم خوب رسیدم !


این خوبه ! ولی شده تا حالا توی ایمیل یاهو ؛ یه هویی ببینید ؛ خروج کرده و می خواد دوباره رمز بهش بدید ؟ برای چی این اتفاق می افته ؟

و یک نکته دیگه : این یعنی همیشه اولین کسی که لاگین میکنه رو باید به رسمیت بشناسم ؟ ! این درسته ؟
بهم این مورد توصیه شده ! منظورم مثل سامانه ورود ویندوز هست .. و داشتن مدیر ارشد و مدیر معمولی
چیزی که به شما توصیه شده مجوز مدیران هست ولی الان بحث روی لاگین امن هست.
این خوبه ! ولی شده تا حالا توی ایمیل یاهو ؛ یه هویی ببینید ؛ خروج کرده و می خواد دوباره رمز بهش بدید ؟ برای چی این اتفاق می افته ؟
وقتی خارج شد، توی اون فیلد مشخص کنید که کاربر خارج شده و وقتی وارد شد مشخص کنید که کاربر وارد شده.

این یعنی همیشه اولین کسی که لاگین میکنه رو باید به رسمیت بشناسم ؟ ! این درسته ؟
مشکل امنیت فقط موقع لاگین نیست. درثانی هر راهی بخوای برید باید برنامه نویسی کنید که اون هم با مشکلات روبرو هست.

فکر میکنم با جستجو هایی که انجام دادم به یک الگوریتم خوب رسیدم !
این الگوریتم رو اینجا بزارید تا بررسیش کنیم.
 

masima

Member
چیزی که به شما توصیه شده مجوز مدیران هست ولی الان بحث روی لاگین امن هست.
دقیقا منظورم همون لاگین هست !
منظورم اینه که ما توی ویندوز یک مدیر ارشد داریم به نام administrator که نامش توی همه سیستم ها همینه ! و بهش رمز میدیم و دیگه ازش استفاده نمی کنیم ؛
و برای خودمون کاربر مدیر ایجاد می کنیم ؛ که امتیازات ادمین رو داره ولی نه همشو !
حالا برای یک سایت هم همینجوره ؛ می تونیم به مدیر اجازه تغییر رمز عبورش رو بدیم و اون رو توی جدول مدیرا ذخیره کنیم ؛
ولی همیشه باید این رو بدونیم که اگه یه وقتی یه روزی ، رمز مدیر رو فراموش کردیم و ... یک مدیر ارشد وجود داره که امکانات بسیار کامل تری داره از جمله امکان حذف مدیر و تغییر رمز عبور و ... که نام و رمز این مدیر ارشد ثابته و تغییر نمی کنه !

این ها همش ایده خودم هست و فک کنم خیلی جالب باشه ! این جور نیس ؟

حالا یک سوال دارم از شما :
بنظرم بهتره که جدولی که اطلاعات مدیران و کاربرها رو نگه داری می کنه جدا باشه.
خوب اگه قراره که صفحه لاگین مدیر با دیگر کاربران یکی باشه (که من هنوز موافق این مورد نیستم ) چطور تشخیص می دید که کسی که لاگین کرده مدیر هست یا کاربر ؟ لطفا توضیح بدید ؟
وقتی خارج شد، توی اون فیلد مشخص کنید که کاربر خارج شده و وقتی وارد شد مشخص کنید که کاربر وارد شده.
منظورم این نبود ؛ طبیعی هست که اگه یک ستون برای مشخص کردن لاگین بودن یا نبودن کاربر داشته باشیم ؛ باید اون رو با توجه به تغییر شرایط کاربر به روز کنیم ؛
منظورم اینه اگه طبق همون مطالبی که در مورد لاگین دو کاربر 1 و 2 گفتم ؛ و طبق همین مطالبی که شما درباره اضافه کردن یک ستون برای وضعیت کاربر و یکی برای زمان لاگین گفتید ؛
چرا توی سایتی مثل ایمیل یاهو گاهی وقت ها بدون اینکه کاربر بخواد و در حال گشت و گذار توی ایمیلش یهو از ایمیلش خارج میشه و یاهو بهش میگه باید برای مطمئن شدن از اعتبار شخص رمز عبورش رو دوباره وارد کنه ؟

پس معلوم میشه سایت یاهو از این روش که شما گفتید استفاده نمی کنه !
چون روش شما اولین شخصی که لاگین میکنه رو به رسمیت میشناسه و به بقیه که میخواین با همون یوزر و رمز وارد شن محل نمیده و هشدار هم نمیده ؟!

و همینطور موقع چت با یاهو مسنجر هم همینطوره !
شما با یاهو مسنجرت وصل شو بعدش برو به سایت ebuddy و سعی کن دوباره از اونجا به آیدیت وصل شی ؛
بعدش می بینی که از یاهو مسنجرت یهو خارج میشی و بهت پیغام میده که شخص دیگه ای داره به یاهوت وصل میشه !

من میخوام الگوریتم و روش دقیق این نمونه ها رو بدونم ! که دقیقا چه کار هایی باید انجام بدم و چه هشدار هایی رو باید بدم ؟
 
آخرین ویرایش:

phpweb

Active Member
دقیقا منظورم همون لاگین هست !
منظورم اینه که ما توی ویندوز یک مدیر ارشد داریم به نام administrator که نامش توی همه سیستم ها همینه ! و بهش رمز میدیم و دیگه ازش استفاده نمی کنیم ؛
و برای خودمون کاربر مدیر ایجاد می کنیم ؛ که امتیازات ادمین رو داره ولی نه همشو !
حالا برای یک سایت هم همینجوره ؛ می تونیم به مدیر اجازه تغییر رمز عبورش رو بدیم و اون رو توی جدول مدیرا ذخیره کنیم ؛
ولی همیشه باید این رو بدونیم که اگه یه وقتی یه روزی ، رمز مدیر رو فراموش کردیم و ... یک مدیر ارشد وجود داره که امکانات بسیار کامل تری داره از جمله امکان حذف مدیر و تغییر رمز عبور و ... که نام و رمز این مدیر ارشد ثابته و تغییر نمی کنه !

این ها همش ایده خودم هست و فک کنم خیلی جالب باشه ! این جور نیس ؟

حالا یک سوال دارم از شما :

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

منظورم این نبود ؛ طبیعی هست که اگه یک ستون برای مشخص کردن لاگین بودن یا نبودن کاربر داشته باشیم ؛ باید اون رو با توجه به تغییر شرایط کاربر به روز کنیم ؛
منظورم اینه اگه طبق همون مطالبی که در مورد لاگین دو کاربر 1 و 2 گفتم ؛ و طبق همین مطالبی که شما درباره اضافه کردن یک ستون برای وضعیت کاربر و یکی برای زمان لاگین گفتید ؛
چرا توی سایتی مثل ایمیل یاهو گاهی وقت ها بدون اینکه کاربر بخواد و در حال گشت و گذار توی ایمیلش یهو از ایمیلش خارج میشه و یاهو بهش میگه باید برای مطمئن شدن از اعتبار شخص رمز عبورش رو دوباره وارد کنه ؟

پس معلوم میشه سایت یاهو از این روش که شما گفتید استفاده نمی کنه !
چون روش شما اولین شخصی که لاگین میکنه رو به رسمیت میشناسه و به بقیه که میخواین با همون یوزر و رمز وارد شن محل نمیده و هشدار هم نمیده ؟!

و همینطور موقع چت با یاهو مسنجر هم همینطوره !
شما با یاهو مسنجرت وصل شو بعدش برو به سایت ebuddy و سعی کن دوباره از اونجا به آیدیت وصل شی ؛
بعدش می بینی که از یاهو مسنجرت یهو خارج میشی و بهت پیغام میده که شخص دیگه ای داره به یاهوت وصل میشه !

من میخوام الگوریتم و روش دقیق این نمونه ها رو بدونم ! که دقیقا چه کار هایی باید انجام بدم و چه هشدار هایی رو باید بدم ؟

دقیقا منظورم همون لاگین هست !
این تاپک رو نگاه کنید با دوستان در مورد سیستم مجوز دهی بحث می کنیم. می خوام به یه حالتی برسم که مدیر کل بتونه رفتار همه مدیران جز رو کنترل کنه برسم. توی این تاپک کلی بحث می کنیم ولی یکی از این رفتارها هم می تونه دادن مجوز به مدیران جز برای تغییر کلمه رمز باشه.
http://forum.majidonline.com/showthread.php?t=172135

روشی که شما می خوای پیاده کنی، شاید نظر مشتری رو جلب نکنه و اون نخواد همچین سیستمی براش پیاده کنید.

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

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

masima

Member
خب از دکمه های رادیویی استفاده کن. برای مدیران باید دکمه مدیر و برای اعضا باید دکمه اعضا زده بشه.
من یادمه چند سال پیش این مدلی که میگید مد بود ! ولی الان سایتی رو ندیدم که ایجوری باشه !
میشه نمونه بدید ؟
 

phpweb

Active Member
من یادمه چند سال پیش این مدلی که میگید مد بود ! ولی الان سایتی رو ندیدم که ایجوری باشه !
میشه نمونه بدید ؟
بجای این روش از آرایه گت استفاده کنید. لینکتون به شکل زیر باشه.
login.php?type=user
login.php?type=admin

بعد یه فیلد مخفی توی فرم قرار بدید و مقدار type رو مشخص کنید تا اسکریپتها بدوننکه مدیر می خواد لاگین کنه یا کاربر.
 

masima

Member
بجای این روش از آرایه گت استفاده کنید. لینکتون به شکل زیر باشه.
login.php?type=user
login.php?type=admin

بعد یه فیلد مخفی توی فرم قرار بدید و مقدار type رو مشخص کنید تا اسکریپتها بدوننکه مدیر می خواد لاگین کنه یا کاربر.
منظورتون آرایه پست با فیلد مخفی هست دیگه ؟ ! :green: و بدون لینک پرسشی :)
 

Domanjiri

Well-Known Member
سلام دوستان

یه چیزی هم من بگم؟! :)
می دونید ؛ در حال حاضر سیستمی که دارم اینجوریه : کاربر 1 به فعالیت خودش ادامه میده ؛ کاربر 2 با همون اطلاعات لاگین کاربر 1 ؛ لاگین میکنه ؛ اون هم فعالیت خودش رو شروع میکنه ! ؛ سشن های هر کدوم هم به تنهایی به فعالیت خودشون ادامه میدن !!
این یعنی فاجعه !

برای جلوگیری از لاگین از دوسیستم، معمولن اینکار رو انجام میدن:

یه جدول داخل دیتابیس ایجاد می کنیم و داخلش session_id , user_id و login_time این مقادیر رو قرار میدیم

حالا توی کد چک می کنیم که اگه این user_id دارای session_id ایه که برابر با session_id ذخیره شده توی جدول نیست، یوزر رو log out می کنیم و اون سطر رو از جدول پاک می کنیم، در غیر اینصورت فیلد زمان رو آپدیت می کنیم (اگه می خواین زمان آخرین ورود هر کاربر رو داشته باشین، باید اونو توی یه جدول دیگه، مثلن جدولی که اطلاعات کاربر توش هست ذخیره کنید)

هربار هم سطرهایی که فیلد زمانش مربوط به مثلن 1 ساعت قبل هست رو حذف میکنیم (برای کاربرانی که یادشون میره log out کنن!)

سیستم نباید طوری باشه که به نفر دوم اجازه لاگین کردن نده، فرض کنید من دارم با مرورگر کروم توی سایت می چرخم، بعد یهویی کروم کرش میشه و من می خوام که با فایرفاکس دوباره لاگین کنم و به کارم ادامه بدم، اگه این اجازه رو نداشته باشم، اونوقت معلوم نیست که تو دلم چه چیزا که به برنامه نویس سایت نمی گم(!!):green:

شاد و پیروز باشین
 

Domanjiri

Well-Known Member
سلام، خوبی؟

user_id همون..اِ اِ...دیگه اسمش روشه دیگه، چی بگم آخه؟:green: الان مثلن user_id من توی مجید آنلاین 42979 هست (برو روی نام کاربریم)

session_id همون session یا اگه دوست داشتید hash شده ی session

این اسم ها رو همینطوری گذاشتم و لازم نیست که اینا باشه، یا اینکه جز اینها فیلد دیگه ای نباشه...خواستم مفهوم رو برسونم، پس تو هم فقط مفهوم رو ازم بگیر(نه اسم و ...!!)

موفق باشی
 

masima

Member
به مرحمت شما !

اون سوال رو پرسیدم که در حقیقت این سوال رو بپرسم :
برای جلوگیری از لاگین از دوسیستم، معمولن اینکار رو انجام میدن:

یه جدول داخل دیتابیس ایجاد می کنیم و داخلش session_id , user_id و login_time این مقادیر رو قرار میدیم

حالا توی کد چک می کنیم که اگه این user_id دارای session_id ایه که برابر با session_id ذخیره شده توی جدول نیست، یوزر رو log out می کنیم و اون سطر رو از جدول پاک می کنیم، در غیر اینصورت فیلد زمان رو آپدیت می کنیم (اگه می خواین زمان آخرین ورود هر کاربر رو داشته باشین، باید اونو توی یه جدول دیگه، مثلن جدولی که اطلاعات کاربر توش هست ذخیره کنید)
خب در حالت ایده آل (اگه منظورت همین باشه ) باید session_id حاوی آیدی سشن باشه ؛ که با هر بار تولید سشن یک آیدی یکتا تولید میشه ؛ بنابراین کاربر معتبر میتونه به فعالیتش ادامه بده تا زمانی که نفر دومی بخواد با اطلاعات لاگین اون وارد شه ؛

در این صورت شرطی که گفتی برابری نمیکنه ؛ چون اکنون یک سشن جدید با یک آیدی جدید داریم و دستور logout برای کاربر حاضر اجرا میشه و سطر مورد نظر حذف میشه ؛ این طور نیست ؟

و در واقع با توجه به گفته های قبلی خودم در مورد دو کاربر 1 و 2 ؛ به محض لاگین کاربر 2 ؛ کاربر 1 نا معتبر شناخته میشه ؛ و logout براش اتفاق می افته ؛ این جور نیست ؟
و برای تشخیص این اتفاق ؛ پیش از انجام هر کاری توسط کاربر باید اطلاعات این جدول دوم رو با توجه به شرطی که گفتی ؛ بررسی کنیم ؛ که آیا این شخص معتبره یا نه ؛ اینجوریه ؟

خب سوالی که برام پیش اومده اینه :
من کلی زحمت کشیدم یک سشن طراحی کردم که فک کنم امن باشه (فقط مشکلش همون موردی هست که گفتم قبلا ) ؛ و این جناب سشن ما روی سرور هست ؛ و توی جدول هم ذخیره نمیکنم ؛
توی جدولم هم یک ستون برای مشخص کردن وضعیت روی خط بودن یا نبودن کاربر دارم ؛ و همین طور زمان آخرین لاگین و لاگین کنونی.

راه دیگه ای بر اساس سشن ذخیره شده توی سرور و همین چیزایی که گفتم ؛ به فکرت میرسه ؟ ( یا باید طراحیم رو از بین ببرم ؛ خدای نا کرده ! )
 

Domanjiri

Well-Known Member
زنده باد! منظورمو فهمیدی :)

ویرایش شد، دلیل: وجود یک سوتی خسته!

من کلی زحمت کشیدم یک سشن طراحی کردم که فک کنم امن باشه (فقط مشکلش همون موردی هست که گفتم قبلا ) ؛ و این جناب سشن ما روی سرور هست ؛ و توی جدول هم ذخیره نمیکنم ؛
ای داد بیداد!

اگه قراره که روی سرویس های اشتراکی سایت رو راه اندازی کنی، پیشنهاد می کنم که ذخیره session بصورت فایل و روی سرور رو کنار بزاری! دوستمون phpweb یه جایی به یکی دیگه از دوستان :)shock:!) راجع به امنیت پوشه temp روی سرویس های اشتراکی هشدار داده بود، اگه اون بحث رو پیگیری کرده باشی باید یادت بیاد:idea:

اگر هم واسه خودتون سرور دارین :)cool:) بازم بهتره که session رو توی دیتابیس بریزی، چون بعید می دونم پیاده سازی کارای اینچنینی (جلوگیری از لاگین همزمان دو نفر با یه یوزر..) با سیستم فایلی امکان پذیر باشه (البته منظورم به این صورت بهینه و حرفه ای یی که می خوای هست).

من که اطلاعاتی ندارم در این مورد، اگه دوستان چیزی می دونن، بگن تا ما هم استفاده کنیم.(عجله نکن و از چند نفر بپرس، هرچند تغییر کد هم همچین فاجعه ی عظیمی نیست :green:..)

موفق باشی
 
آخرین ویرایش:

masima

Member
در این زمان، چون ما سطر مربوط به اون کاربر رو کلن از جدول پاک می کنیم، در واقع هر دو کاربر logout میشن، و این همون چیزی هست که باید باشه
خب بعدش چی میشه ؟
( این در مورد شخصی که خیلی خوشحال هست:green: که توی سیستم ثبت نام کرده و می خواد برا اولین بار لاگین کنه ؛ هم هست ! )

در این صورت سطر مربوط به اون کاربر پاک شده دیگه ؛ پس بهتره الگوریتم رو اینجوری کاملتر کنیم :

برای جلوگیری از لاگین از دوسیستم، معمولن اینکار رو انجام میدن:

یه جدول داخل دیتابیس ایجاد می کنیم و داخلش session_id , user_id و login_time این مقادیر رو قرار میدیم

* حالا توی کد چک می کنیم که اگه user_id شخص توی این جدول وجود داشته باشه بررسی های توی آکولاد رو انجام بده {
اگه این user_id دارای session_id ایه که برابر با session_id ذخیره شده توی جدول نیست، یوزر رو log out می کنیم و اون سطر رو از جدول پاک می کنیم، در غیر اینصورت فیلد زمان رو آپدیت می کنیم (اگه می خواین زمان آخرین ورود هر کاربر رو داشته باشین، باید اونو توی یه جدول دیگه، مثلن جدولی که اطلاعات کاربر توش هست ذخیره کنید) }
* در غیر این صورت اگه کاربر معتبر هست ؛ لاگین کنه و اطلاعات مربوط به user_id و session_id و زمان لاگین توی این جدول ثبت بشه !

این جور نیست ؟ :)

اگه قراره که روی سوریس های اشتراکی سایت رو راه اندازی کنی، پیشنهاد می کنم که ذخیره session بصورت فایل و روی سرور رو کنار بزاری! دوستمون phpweb یه جایی به یکی دیگه از دوستان :)shock:!) راجع به امنیت پوشه temp روی سرویس های اشتراکی هشدار داده بود، اگه اون بحث رو پیگیری کرده باشی باید یادت بیاد
یادم میاد ولی آخرش متوجه نشدم اون شخص (اسمش یادم نیست ) قانع شد یا نه ؟!
در هر صورت با ذخیره سشن در پایگاه داده ؛ چیزی به نام سشن نداریم ؛ فقط داریم یه چند تا ستون به جدول اضافه می کنیم و هی مواظبیم و اونا رو بروز میکنیم ؛ و هر وقت هم بهشون نیاز باشه ؛ هی باید به پایگاه داده وصل شیم ! :shock::-?
 

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

بالا