PDA

View Full Version : گفتگو: امنیت کوکی کاربر + درخواست ایده



colors
یک شنبه 13 مرداد 1392, 11:16 صبح
سلام

دوستان فرض کنید سایتی برای اینکه کاربر مجددا لاگین نکنه یه کوکی براش ست میکنه و دفعات بعد با چک کردن کوکی, کاربر رو هدایت میکنه. به فرض مثلا ما میایم ایمیل و id کاربر رو هش و تو کوکی میریزیم و زمانی که کاربر وارد میشه مقادیر رو explode میکنیم و طبق داده های دیتابیس, پروفایل مورد نظر رو در اختیارش میزاریم.

خوب الان اگه کسی بتونه مقدار کوکی یکی رو بدست بیاره, یعنی اینکه کار تمومه دیگه!
مثلا همین الان خودم رو سیستمی که قبلا نوشتم تست کردم دیدم این مشکلو داره و وقتی کوکی سیستم بغل دستی رو رو این سیستم اعمال کردم دیدم خیلی راحت رفتم تو پروفایلش!

رو چندتا سایت داخلی تست کردم تعدادیشون امن و تعدادیشون نا امن بودن.( خود برنامه نویس رو چون کوکی ها زیادی ست میکنه تست نکردم).

الان به نظر شما چه کار میشه کرد, چه ایده ای دارید؟

qartalonline
یک شنبه 13 مرداد 1392, 11:43 صبح
به نظر من برای ذخیره در کوکی بهتره خودتون یه الگوریتم رمزنگاری بنویسن و علاوه بر استفاده از توابع هش داده هاتون رو بصورت رمز شده ذخیره کنید.

مهرداد سیف زاده
یک شنبه 13 مرداد 1392, 11:58 صبح
من یه فیلد جداگانه توی دیتابیس میزارم برای ورود و خروج کاربر موقعی که کاربر لاگین میکنه یه رشته توکن قوی 50 کاراکتری می‌سازم و در کوکی+فیلد دیتابیس ذخیره میکنم. دقت کنید رشته توکن قابل حدس زدن نیست و توابع اساندارد همین کار ساخته شده. بعد از اون برای کنترل ورود و خروج فقط با همین فیلد کار میکنم و کاری به id کاربر یا نام کاربریش ندارم.

colors
یک شنبه 13 مرداد 1392, 12:00 عصر
به نظر من برای ذخیره در کوکی بهتره خودتون یه الگوریتم رمزنگاری بنویسن و علاوه بر استفاده از توابع هش داده هاتون رو بصورت رمز شده ذخیره کنید.

مشکل نحوه ذخیره داده ها, هش و رمزنگاریشون نیست.
مشکل محتویات کوکیه که اگه کاربر شماره 1 به کوکی کاربر شماره 2 دسترسی داشته باشه, میتونه با کپی کردن محتویات کوکی طرف و ویرایش کوکی خودش, سیستم رو دور بزنه و خودشو به عنوان کاربر شماره 2 معرفی کنه

colors
یک شنبه 13 مرداد 1392, 12:04 عصر
من یه فیلد جداگانه توی دیتابیس میزارم برای ورود و خروج کاربر موقعی که کاربر لاگین میکنه یه رشته توکن قوی 50 کاراکتری می‌سازم و در کوکی+فیلد دیتابیس ذخیره میکنم. دقت کنید رشته توکن قابل حدس زدن نیست و توابع اساندارد همین کار ساخته شده. بعد از اون برای کنترل ورود و خروج فقط با همین فیلد کار میکنم و کاری به id کاربر یا نام کاربریش ندارم.

خب شما فکر کن کاربر شماره 1 که کوکیش با محتویات مثلا "123456789" ذخیره شده و در دیتابیس و در سطر این کاربر یه فیلدی هست که این مقدار رو ذخیره میکنه و وقتی کاربر وارد میشه یه مقایسه صورت میگیره و اگه درست باشه, اطلاعات همون سطر رو به کاربر میده درسته! پس اگه کاربر شماره 2 بیاد کوکی خودشو با مقدار "123456789" ویرایش کنه و بیاد تو سایت به عنوان کاربر شماره 1 معرفی میشه, درسته! پس دقیقا سوال منم همین هست که چکارکنیم که این مشکل رو رفع کنیم؟

darkcms
یک شنبه 13 مرداد 1392, 16:08 عصر
سلام

دوستان فرض کنید سایتی برای اینکه کاربر مجددا لاگین نکنه یه کوکی براش ست میکنه و دفعات بعد با چک کردن کوکی, کاربر رو هدایت میکنه. به فرض مثلا ما میایم ایمیل و id کاربر رو هش و تو کوکی میریزیم و زمانی که کاربر وارد میشه مقادیر رو explode میکنیم و طبق داده های دیتابیس, پروفایل مورد نظر رو در اختیارش میزاریم.

خوب الان اگه کسی بتونه مقدار کوکی یکی رو بدست بیاره, یعنی اینکه کار تمومه دیگه!
مثلا همین الان خودم رو سیستمی که قبلا نوشتم تست کردم دیدم این مشکلو داره و وقتی کوکی سیستم بغل دستی رو رو این سیستم اعمال کردم دیدم خیلی راحت رفتم تو پروفایلش!

رو چندتا سایت داخلی تست کردم تعدادیشون امن و تعدادیشون نا امن بودن.( خود برنامه نویس رو چون کوکی ها زیادی ست میکنه تست نکردم).

الان به نظر شما چه کار میشه کرد, چه ایده ای دارید؟
با سلام.
خوب چرا از session استفاده نمی کنی؟
دوره کوکی دیگر تمام شده است!!!!!!
به امید فردایی بهتر!:لبخندساده:

colors
یک شنبه 13 مرداد 1392, 17:09 عصر
با سلام.
خوب چرا از session استفاده نمی کنی؟
دوره کوکی دیگر تمام شده است!!!!!!
به امید فردایی بهتر!:لبخندساده:

بردار من کی میگه دوره کوکی تموم شده؟ اصلا هیچ ربطی به هم ندارن که! سشن کارخودشو بلده و کوکی هم کارخودشو.
کوکی رو برای لاگین اتو میخوام. "به خاطر داشته داشتن"

engmmrj
یک شنبه 13 مرداد 1392, 17:50 عصر
شما اگه یک String Random به صورت Hash درست کنید و بریزید تو کوکی کاربر دیگه چطوری میتونه اونو Edit کنه و یا دور بزنه ؟!

colors
یک شنبه 13 مرداد 1392, 18:01 عصر
شما اگه یک String Random به صورت Hash درست کنید و بریزید تو کوکی کاربر دیگه چطوری میتونه اونو Edit کنه و یا دور بزنه ؟!

بحث تشخیص محتویات کوکی نیست! کاربر میاد کوکی یکی دیگرو کپی میکنه رو سیستم خودش, تموم. اینو چکار کنیم.

Veteran
یک شنبه 13 مرداد 1392, 18:19 عصر
کوکی رو برای لاگین اتو میخوام. "به خاطر داشته داشتن"
به نظرم زیاد مهم نیست.همونقدر بسه که خوده مرورگر اطلاعات رو ذخیره میکنه درون تکست فیلد ها کافیه !

engmmrj
یک شنبه 13 مرداد 1392, 18:21 عصر
بحث تشخیص محتویات کوکی نیست! کاربر میاد کوکی یکی دیگرو کپی میکنه رو سیستم خودش, تموم. اینو چکار کنیم.
خوب میتونی IP کاربر بگیری که وقتی IP عوض شد دیگه کوکی کار نکنه

Veteran
یک شنبه 13 مرداد 1392, 18:25 عصر
خوب میتونی IP کاربر بگیری که وقتی IP عوض شد دیگه کوکی کار نکنه
IP بیشتر کاربر ها داینامیکه !

engmmrj
یک شنبه 13 مرداد 1392, 18:32 عصر
به جز IP راه دیگری فکر نکنم وجود داشته باشه !

AbiriAmir
یک شنبه 13 مرداد 1392, 21:05 عصر
والا قاعدتا باید آی پی و مشخصات بروزر رو حداقل ذخیره کنید...
اگر آی پی رو ذخیره نمیکنید مشخصات مرورگر رو ذخیره کنید
میشه با هر بار لوگین 1 رشته رندوم رو هش کنید و اون رشته رو توی دیتابیس هم ذخیره و چک کنید که هر بار رشته تولید شده متفاوت باشه. تنها مشکلی که پیش میاد اینه که 1 کاربر نمیتونه چند جا لوگینش رو ذخیره کنه یعنی 1 جا لوگین شد جای دیگه خودبخود logout میشه.

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

colors
یک شنبه 13 مرداد 1392, 21:06 عصر
به نظرم زیاد مهم نیست.همونقدر بسه که خوده مرورگر اطلاعات رو ذخیره میکنه درون تکست فیلد ها کافیه !

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

colors
یک شنبه 13 مرداد 1392, 21:07 عصر
خوب میتونی IP کاربر بگیری که وقتی IP عوض شد دیگه کوکی کار نکنه

نمیشه به IP دل خوش کرد. IP که تو هفته چند بار تغییر میکنه, پس زیاد جالب نیست.

colors
یک شنبه 13 مرداد 1392, 21:12 عصر
والا قاعدتا باید آی پی و مشخصات بروزر رو حداقل ذخیره کنید...
اگر آی پی رو ذخیره نمیکنید مشخصات مرورگر رو ذخیره کنید
میشه با هر بار لوگین 1 رشته رندوم رو هش کنید و اون رشته رو توی دیتابیس هم ذخیره و چک کنید که هر بار رشته تولید شده متفاوت باشه. تنها مشکلی که پیش میاد اینه که 1 کاربر نمیتونه چند جا لوگینش رو ذخیره کنه یعنی 1 جا لوگین شد جای دیگه خودبخود logout میشه.

البته این مساله رو هم درنظر بگیرید که اگر شخصی اینقدر دسترسیش بالا باشه که بتونه کوکی رو از کامپیوتر طرف بدزده خیلی کارای دیگه هم میتونه بکنه!

مرورگر؟ اصلا منظقی نیست!

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

qartalonline
یک شنبه 13 مرداد 1392, 22:47 عصر
اگه اینجوری فک کنید ، که تقریبا راه حلی وجود نداره یعنی همه راه ها قابل دور زدن هستند.
مثلا میتونید useragent رو ذخیره کنید ولی اون هم قابل جعل هستش.

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

آخرین راه امنیت به نظر من استفاده از تشخیص چهره ، اثر انگشت ، اینجور مسائل هستش. مطمئن باشید اگه از این جور روشها هم بیشتر استفاده بشه باز راههای دور زدنشون پیدا میشه.

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

rezaonline.net
یک شنبه 13 مرداد 1392, 23:38 عصر
توی کوکی یک کلید قرار بده ، به طور مثال 1122aabbccdd ، توی دیتابیس هم براساس همین کلید یک رکورد بذار که اطلاعات آی پی ، یوزر ایجنت ، رزولیشن و ... توش قرار داده بشه .
همچنین آخرین زمان ورود کاربر رو توش ذخیره کن .
هر بار هم که چک میکنی قسمت اول آی پی رو چک کن و ویوزر ایجنت و ... .
هر 20 دقیقه یکبار که کاربر فعالیت میکنه توی سایت کلید رو تغییر بده ، هم توی دیتابیس هم توی کوکی .
لذا اگر کسی بخواد کوکی رو بدزده و ست کنه با اطلاعات کاربر ، توی اون 20 دقیقه باید کارشو انجام بده .
الگویی هم برای سیستمت در نظر بگیر که از هر حساب فقط یک کاربر حق فعالیت داشته باشه که اونم میتونی بر اساس اون آی پی که ذخیره کردی بررسی کنی .
پس احتمال داره به صفر میرسه اما هنوز صفر نیست .
path کوکی رو سعی کن محدود به آدرس سایت کنی .
فکر کنم امنیت قابل قبولی باشه .
:)

colors
دوشنبه 14 مرداد 1392, 00:12 صبح
توی کوکی یک کلید قرار بده ، به طور مثال 1122aabbccdd ، توی دیتابیس هم براساس همین کلید یک رکورد بذار که اطلاعات آی پی ، یوزر ایجنت ، رزولیشن و ... توش قرار داده بشه .
همچنین آخرین زمان ورود کاربر رو توش ذخیره کن .
هر بار هم که چک میکنی قسمت اول آی پی رو چک کن و ویوزر ایجنت و ... .
هر 20 دقیقه یکبار که کاربر فعالیت میکنه توی سایت کلید رو تغییر بده ، هم توی دیتابیس هم توی کوکی .
لذا اگر کسی بخواد کوکی رو بدزده و ست کنه با اطلاعات کاربر ، توی اون 20 دقیقه باید کارشو انجام بده .
الگویی هم برای سیستمت در نظر بگیر که از هر حساب فقط یک کاربر حق فعالیت داشته باشه که اونم میتونی بر اساس اون آی پی که ذخیره کردی بررسی کنی .
پس احتمال داره به صفر میرسه اما هنوز صفر نیست .
path کوکی رو سعی کن محدود به آدرس سایت کنی .
فکر کنم امنیت قابل قبولی باشه .
:)

مورد اطمینان که نیست, ولی در کل خوبه

engmmrj
دوشنبه 14 مرداد 1392, 00:13 صبح
مگه دارین سایت بانک مرکزی رو طراحی میکنین !

qartalonline
دوشنبه 14 مرداد 1392, 09:10 صبح
توی کوکی یک کلید قرار بده ، به طور مثال 1122aabbccdd ، توی دیتابیس هم براساس همین کلید یک رکورد بذار که اطلاعات آی پی ، یوزر ایجنت ، رزولیشن و ... توش قرار داده بشه .
همچنین آخرین زمان ورود کاربر رو توش ذخیره کن .
هر بار هم که چک میکنی قسمت اول آی پی رو چک کن و ویوزر ایجنت و ... .
هر 20 دقیقه یکبار که کاربر فعالیت میکنه توی سایت کلید رو تغییر بده ، هم توی دیتابیس هم توی کوکی .
لذا اگر کسی بخواد کوکی رو بدزده و ست کنه با اطلاعات کاربر ، توی اون 20 دقیقه باید کارشو انجام بده .
الگویی هم برای سیستمت در نظر بگیر که از هر حساب فقط یک کاربر حق فعالیت داشته باشه که اونم میتونی بر اساس اون آی پی که ذخیره کردی بررسی کنی .
پس احتمال داره به صفر میرسه اما هنوز صفر نیست .
path کوکی رو سعی کن محدود به آدرس سایت کنی .
فکر کنم امنیت قابل قبولی باشه .
:)

باید فکر این رو هم بکنید که ممکنه کاربر از پروکسی استفاده کنه یا useragent ش تغییر کنه.

eshpilen
دوشنبه 14 مرداد 1392, 09:31 صبح
یه چی میگیا.
خب کسی که بتونه کوکی یکی دیگه رو سرقت کنه یعنی ه_ک کرده سمت کلاینت رو.
ه_ک سمت کلاینت هم مسئولیت شما و سایت نیست.
البته شما تاحدی که میتونی، برحسب مورد و درجهء امنیت مورد نیاز، سعی میکنی امنیت سمت کلاینت رو بالا ببری و از یکسری حمله های سمت کلاینت جلوگیری کنی، چون امنیت سمت کلاینت و سمت سرور با هم بی ارتباط نیستن و دو طرفه ارتباط دارن. ولی دیگه 100% نمیشه هرکاری در سمت کلاینت کرد، کلاینت باید خودش هم امنیت داشته باشه که بر عهدهء شما نیست. بعدش بهرحال هرچیزی هزینه ای هم داره و اینکه بخواید همه جوره محکم کاری کنید شاید در بعضی موارد صرف نکنه چون موجب پیچیدگی و حجم برنامه و مصرف پرفورمنس و محدودیت های کاربری و غیره میشه.
این همه سایت و برنامه هم که هستن خیلی هاشون همینطوری هستن (با انتقال کوکی از یک سیستم به سیستم دیگر سیستم کار میکنه).
ولی بعضیا هم اینطوری نیستن بخاطر اینکه برای این مورد مستقیم تمهید شده یا به علت دیگری غیرمستقیم این پدیده بصورت غیرعمدی بوجود آمده.
نیاز و حساسیت روی امنیت هم که یکسان نیست. بسته به کاربرد و شرایط و خود برنامه نویس تفاوت میکنه.
البته حداقل کاری که برنامه نویس باید بکنه، تمهیدات لازم برای محافظت کاربر دربرابر حمله های XSS و CSRF است.
با XSS که میتونن همون کوکی رو که شما میگی سرقت کنن (اگر برنامه نویس در این مورد هیچ کاری نکرده باشه) و همچنین کارهای دیگری ممکنه بکنن.
با CSRF هم که میتونن از جانب کاربر بدون اطلاعش عملیاتی رو موجب بشن.

eshpilen
دوشنبه 14 مرداد 1392, 09:37 صبح
یه راهش همون استفاده از IP است.
و راه دیگه ای هم هست؟
بقول خارجیها اگر امنیت بیشتر میخوای دیگه باید بری سراغ Two factor authentication.
یعنی مثلا توکن سخت افزاری و اینها علاوه بر روشهای سنتی احراز هویت (پسورد).

البته یه کاری هم که میتونی برای افزایش امنیت بکنی اینه که برای عملیات مهم از کاربر ورود مجدد رمز عبور بخوای.
البته اگر کلاینت امنیتش خیلی پایین باشه اونوقت ه_کر میتونه روی سیستم key logger کار بذاره و پسورد طرف رو سرقت کنه.
البته از راههای دیگری هم میشه پسوردی رو که طرف وارد میکنه سرقت کرد.

mtnam1372
دوشنبه 14 مرداد 1392, 12:27 عصر
سُلام به همه دوستان

شما راه های زیادی دارین : ساده و پیچیده

ساده:
در کوکی هش دیگری هم ذخیره کنید تشکیل شده از(اطلاعات سیستم عامل و اطلاعات مرورگر)

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


روش حرفه ای:
استفاده از متدی که ورد پرس در اخرین نسخه ازش استفاده کرد

colors
دوشنبه 14 مرداد 1392, 13:03 عصر
روش حرفه ای:
استفاده از متدی که ورد پرس در اخرین نسخه ازش استفاده کرد

چه متدی؟
راستی بشینم خود وردپرس رو هم یه چکی بکنم بینم این مشکل رو داره یانه, اگه نبود که متدشو پیداکنیمو و استفاده

colors
دوشنبه 14 مرداد 1392, 13:09 عصر
نه بابا خود وردپرس هم این مشکلو داره!

MMSHFE
دوشنبه 14 مرداد 1392, 14:50 عصر
دوست عزیز، بهتره از الگوریتمهایی که کلید عمومی و خصوصی دارن، استفاده کنید. بعد کلید خصوصی منحصربفرد برای هر کاربر بسازین و توی رکورد مربوط به همون کاربر در دیتابیس ثبت کنید. حالا کوکی رو با استفاده از این کلید خصوصی رمزگشایی کنید و اگه اطلاعات معتبر تولید شد، یعنی کوکی درسته. اینجا دیگه وقتی کاربر کوکی یکی دیگه رو برای خودش کپی میکنه، چون کلید خصوصی رکورد مربوط به خودش توی سیستم فرق میکنه، کوکی کاربر دیگه به دردش نمیخوره. حتی میتونید برای امنیت بیشتر، مواردی مثل IP و User Agent و... رو هم در تولید کلید خصوصی دخالت بدین.

colors
دوشنبه 14 مرداد 1392, 17:30 عصر
دوست عزیز، بهتره از الگوریتمهایی که کلید عمومی و خصوصی دارن، استفاده کنید. بعد کلید خصوصی منحصربفرد برای هر کاربر بسازین و توی رکورد مربوط به همون کاربر در دیتابیس ثبت کنید. حالا کوکی رو با استفاده از این کلید خصوصی رمزگشایی کنید و اگه اطلاعات معتبر تولید شد، یعنی کوکی درسته. اینجا دیگه وقتی کاربر کوکی یکی دیگه رو برای خودش کپی میکنه، چون کلید خصوصی رکورد مربوط به خودش توی سیستم فرق میکنه، کوکی کاربر دیگه به دردش نمیخوره. حتی میتونید برای امنیت بیشتر، مواردی مثل IP و User Agent و... رو هم در تولید کلید خصوصی دخالت بدین.

اگه لطف کنید کمی بیشتر توضیح بدین ممنون میشم, حقیقتا هرچقدر فکر میکنم درک نمیکنم!

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 17:51 عصر
اصلا ذخیره اطلاعات داینامیک کار اشتباهی هست
منطقا اشتباه حالا امنیتی بماند

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

کوکی فقط برای اینکه کاربر فرم پر نکنه

colors
دوشنبه 14 مرداد 1392, 17:57 عصر
اگه درست بود مقادیر کوکی با مقادیر پست شده جایگزین میشه

کوکی فقط برای اینکه کاربر فرم پر نکنه

خب دقیقا مشکل همیجناست اگه اگه کاربری وارد شد و کوکی برای یوزرنیم و پسوردش ست بشه, هکر میاد این دوتا کوکی رو کش میره و میریزه رو سیستم خودش و باهاشون لاگین میکنه. درسته؟

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:15 عصر
والا قاعدتا باید آی پی و مشخصات بروزر رو حداقل ذخیره کنید...
اگر آی پی رو ذخیره نمیکنید مشخصات مرورگر رو ذخیره کنید
میشه با هر بار لوگین 1 رشته رندوم رو هش کنید و اون رشته رو توی دیتابیس هم ذخیره و چک کنید که هر بار رشته تولید شده متفاوت باشه. تنها مشکلی که پیش میاد اینه که 1 کاربر نمیتونه چند جا لوگینش رو ذخیره کنه یعنی 1 جا لوگین شد جای دیگه خودبخود logout میشه.

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

همین روند و جیمیل هم انجام میده
و تو لاگین های متعدد با سیو پس اخطاریه میده تا جایی که سطح نفوذ و تشخیث الگکوریتمش بالا بره کلا از شما میخواد پسورد عوض کنید یا اینکه مرورگرتون و ریست کنید !

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:20 عصر
توی کوکی یک کلید قرار بده ، به طور مثال 1122aabbccdd ، توی دیتابیس هم براساس همین کلید یک رکورد بذار که اطلاعات آی پی ، یوزر ایجنت ، رزولیشن و ... توش قرار داده بشه .
همچنین آخرین زمان ورود کاربر رو توش ذخیره کن .
هر بار هم که چک میکنی قسمت اول آی پی رو چک کن و ویوزر ایجنت و ... .
هر 20 دقیقه یکبار که کاربر فعالیت میکنه توی سایت کلید رو تغییر بده ، هم توی دیتابیس هم توی کوکی .
لذا اگر کسی بخواد کوکی رو بدزده و ست کنه با اطلاعات کاربر ، توی اون 20 دقیقه باید کارشو انجام بده .
الگویی هم برای سیستمت در نظر بگیر که از هر حساب فقط یک کاربر حق فعالیت داشته باشه که اونم میتونی بر اساس اون آی پی که ذخیره کردی بررسی کنی .
پس احتمال داره به صفر میرسه اما هنوز صفر نیست .
path کوکی رو سعی کن محدود به آدرس سایت کنی .
فکر کنم امنیت قابل قبولی باشه .
:)
اینم خوبه
توکن و هی از دست گربه دور کنی تا دنبالش بدود
کاری به اینکه چی ذخیره کنی ندارم
باید یک منبع قابل مقایسه با اطلاعات کاربر باشه که ااز دست کاربران دور باشه ( دیتابیس )
حالا با هربار ورد + فعالیت در سایت ( مرور صفحات و کلا رفرش برنامه ها سایت ) یک اطلاعاتی تغییر کنه ( کد رندوم در کوکی تغییر کنه ) و کپی از اون بره تو باک سایت
اما اگه یک کاربر پس از 10 سال بیاد تو سایت مشکلی نیست که این ادم ادم صاحب هست یا دزد
فقط کلمه خیط شدن برای نفر دوم اینجا معنی پیدا میکنه
و اگه دزد اون ادمی باشه که اولین نفر لاگین کنند باشه یک بار هم اگه بیاد تو دیگه تمومه

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:26 عصر
یه راهش همون استفاده از IP است.
و راه دیگه ای هم هست؟
بقول خارجیها اگر امنیت بیشتر میخوای دیگه باید بری سراغ Two factor authentication.
یعنی مثلا توکن سخت افزاری و اینها علاوه بر روشهای سنتی احراز هویت (پسورد).

البته یه کاری هم که میتونی برای افزایش امنیت بکنی اینه که برای عملیات مهم از کاربر ورود مجدد رمز عبور بخوای.
البته اگر کلاینت امنیتش خیلی پایین باشه اونوقت ه_کر میتونه روی سیستم key logger کار بذاره و پسورد طرف رو سرقت کنه.
البته از راههای دیگری هم میشه پسوردی رو که طرف وارد میکنه سرقت کرد.

بعد از نهایتا هر روشی و هر گونه دور زدنی حالا باید مغز کاربر و بخونی نه مغز کلاینت و
مثلا یک کپتچا کلیکی یا شماتیکی که هم رات بشه سلکت کرد و جواب داد و هم با مضمون باشه
مقلا اخرین کاری که کرده و دفعه قبل براش لیست کنی ون بگه کدوم بوده
یا اسکرین شات اخرین صفحه ای و که دیده نشون بدی
یا کپتچا جی کوئری و شکلکی

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:35 عصر
دوست عزیز، بهتره از الگوریتمهایی که کلید عمومی و خصوصی دارن، استفاده کنید. بعد کلید خصوصی منحصربفرد برای هر کاربر بسازین و توی رکورد مربوط به همون کاربر در دیتابیس ثبت کنید. حالا کوکی رو با استفاده از این کلید خصوصی رمزگشایی کنید و اگه اطلاعات معتبر تولید شد، یعنی کوکی درسته. اینجا دیگه وقتی کاربر کوکی یکی دیگه رو برای خودش کپی میکنه، چون کلید خصوصی رکورد مربوط به خودش توی سیستم فرق میکنه، کوکی کاربر دیگه به دردش نمیخوره. حتی میتونید برای امنیت بیشتر، مواردی مثل IP و User Agent و... رو هم در تولید کلید خصوصی دخالت بدین.

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

الگوریتم رمز نگاریه!

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:38 عصر
در کل منابع ذخیره سازی شما کلاینتی هست که کاربر دزد ! به اون دسترسی داره !
ما داریم از کلمه مقدس " کپی " صحبت میکنیم !
پس هر روشی قابل انتقال به سیستم دیگه ای هست
و من شخصا سیاست سیتم خودم و به دست آبرو بر تغییرات آی پی + هدر های تقلبی و و و روش های غر قابل ثابت نمیدم !

$ M 3 H R D A D $
دوشنبه 14 مرداد 1392, 20:52 عصر
میشه مقایسه داشته ها انجام داد
چون آیپی اطلاعات مرورگر داشته های مشترک یا قابل شبیه سازی هست
مثلا شاید بشه کد تولید شده وابسته به اسامی کلیه کوکی های موحو تا قبل از تولید باشه
خوب این روش و اگه ندونه خوب مشکل داره
اما اگه بدونه میاد کپی همه و میبره

mtnam1372
سه شنبه 15 مرداد 1392, 01:53 صبح
قربونت برم من.......

ببین اگر به کامپیوتر طرف دسترسی داشته باشی و کپی کنی بله ورد پرس با بقیه سیستم ها فرقی نداره اما اصولا دسترسی فیزیکی اتفاق نمی افته بلکه با حملاxxs اسکریپت تزریق میشه و کوکی ها به یغما میرن اما با تمهید ورد پرس با استفاده از httponly دیگه فقط این کوکی برای ادرس همون سایتی که براش درست شده فقط نشون داده میشه/ در واقع اسکریپت های سرقت کوکی دیگه اونارو به هکر نشون نمیدن. یا علی

H:Shojaei
سه شنبه 15 مرداد 1392, 17:47 عصر
سلام
به نظر من اصلا یوزر ایجنت واسه همين كارها گذاشتن ديگه وقتي كاربري مرورگرش عوض بشه خب مثلما بايد يه بار زحمت لاگين دوباره رو بكشه. يا مثلا سيستم عامل عوض كرده كه باز هم همين اتفاق ميافته و وقتي اين چيزها تو برنامه ي ما چك بشه اگر كوكي به سرقت بره حداقل 70% از اين طور حمله جلوگيري ميشه. ديگه چقدر بد شانس باشيم كه مرورگر و سيستم عامل ***ر و كاربر يكي باشن.
همين اتفاق تو جميل فكر كنم ميافته ديگه شما وقتي تو يه مرورگر لاگين ميكنيد و باز تو همون سيستم و يه مرورگر ديگه ميخوايد لاگين كنيد ازتون يوزر پس رو دوباره ميخواد يا وقتي سيستم عامل عوض ميشه همين طور.
شايد درباره ي اين يوزر ايجنت يه چيزي من نميدونم ولي در كل اگه اين طوري نباشه كه راهها ديگه هم مثل همين قابل دور زدنن.

redhat2
جمعه 18 مرداد 1392, 12:42 عصر
یه سوال ، ببخشید که اینجا مطرح میکنم ، ولی خوب گفتم جمع علما جمع اینجا مطرح کنم بهتره ، در هر حالت شرمنده ، به هر حال ، میخواستم ببینم این روشی که من در زیر استفاده می کنم مناسب هست یا نه :

من 2 تا کوکی دارم ، یکی cookie هست که توش id ذخیره میشه و یکی هم hash هست که از username و password هش ده و user agent و ip تشکیل شده که این hash در دیتابیس ذخیره میشه ، بعد کاربر که که قبلا تیک remember را زده ، وقتی وارد صفحه ی profile میشه ، کوکی هشش با کوکی هش شده ای که مربوط به کاربر و در دیتابیس ذخیره شده مطابقت داده میشه ، اگه درست بود ، کاره بعدی که انجما میشه این هستش که میاد user agent و ip کاربر را دریافت میکنه و با user agent , ip که قبلا هش ده و دردیتابیس ذخیره شده مطابقت داده میشه ، اگه درست بود ، که خوب کلا همه چی ok هست ، امنیت این چیزی که من گفتم چطوره ؟

Unique
شنبه 19 مرداد 1392, 01:40 صبح
در کل خیلی با سخت گیری های مورد نظر دوست خوبم colors موافق نیستم اما بهترین روش را آقای شفیعی اشاره کردند ولی توضیح بیشتری ندادن و من سعی میکنم برداشتم از صحبتشون را بگم !
دوستان یکسری الگوریتم ها هستند که از کلید عمومی و کلید خصوصی استفاده میکنند ! شما میتونید با استفاده از اطلاعات زیر که تعدادی از اونها با javascript بدست میاد یک کلید hash شده خصوصی برای هر کاربر که لاگین میکنه بسازین :


navigator.appName
navigator.appVersion
window.screen.colorDepth
window.screen.width
window.screen.height
window.screen.availWidth
window.screen.availHeight
navigator.appCodeName
navigator.platform

میتونید از useragent هم استفاده کنید ! استفاده از ip را توصیه نمیکنم اگه میخواین برای auto login استفاده کنید چون معمولا auto login مربوط به مرورگر و سیستم میشه و نه شبکه ! ما ip بریا مباحث امنیتی بیشتر خیلی خوبه !

خوب حالا ما با اینها یک کلید خصوصی میسازیم برای هر کاربر و یک کلید عمومی منحصر به فرد که همون hash نام کاربری و id و غیره باشه را توی کوکی ذخیره میکنیم ! حالا برای بررسی لاگین بودن ! زا دو تا کلید استفاده میکنیم و اگه جواب داد از نتیجه برای لاگین کاربر بهره میبریم !

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

موفق باشین.

redhat2
شنبه 19 مرداد 1392, 13:23 عصر
در کل خیلی با سخت گیری های مورد نظر دوست خوبم colors موافق نیستم اما بهترین روش را آقای شفیعی اشاره کردند ولی توضیح بیشتری ندادن و من سعی میکنم برداشتم از صحبتشون را بگم !
دوستان یکسری الگوریتم ها هستند که از کلید عمومی و کلید خصوصی استفاده میکنند ! شما میتونید با استفاده از اطلاعات زیر که تعدادی از اونها با javascript بدست میاد یک کلید hash شده خصوصی برای هر کاربر که لاگین میکنه بسازین :


navigator.appName
navigator.appVersion
window.screen.colorDepth
window.screen.width
window.screen.height
window.screen.availWidth
window.screen.availHeight
navigator.appCodeName
navigator.platform

میتونید از useragent هم استفاده کنید ! استفاده از ip را توصیه نمیکنم اگه میخواین برای auto login استفاده کنید چون معمولا auto login مربوط به مرورگر و سیستم میشه و نه شبکه ! ما ip بریا مباحث امنیتی بیشتر خیلی خوبه !

خوب حالا ما با اینها یک کلید خصوصی میسازیم برای هر کاربر و یک کلید عمومی منحصر به فرد که همون hash نام کاربری و id و غیره باشه را توی کوکی ذخیره میکنیم ! حالا برای بررسی لاگین بودن ! زا دو تا کلید استفاده میکنیم و اگه جواب داد از نتیجه برای لاگین کاربر بهره میبریم !

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

موفق باشین.

نیازی هست که این 2 تا کلید تویه دیتابیس ذخیره بشه ؟

shahriyar3
شنبه 19 مرداد 1392, 13:54 عصر
چقدر الگوریتم :گیج:

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

Unique
یک شنبه 20 مرداد 1392, 01:52 صبح
نیازی هست که این 2 تا کلید تویه دیتابیس ذخیره بشه ؟
سمت سرور هر چیزی را دوست دارین برای پردازش ذخیره کنید اما برای کوکی قط کلید عمومی را بدین.

nima1235
پنج شنبه 31 مرداد 1392, 08:59 صبح
سمت سرور هر چیزی را دوست دارین برای پردازش ذخیره کنید اما برای کوکی قط کلید عمومی را بدین.
یه سوالی برام پیش اومده ، اینطور که من فهمیدم باید نهایاتا تا کوکی ذخیره کنیم که یکیش public هستش و یکی از اون ها هم Special ، حالا اگه کاربر کوکی public را بدزده و کوکی Special خودش را هم داشته باشه باز میتونه کاربر را دور بزنه با توجه به اینکه public تویه دیتابیس ذخیره میشه و از hash یوزر نیم و user_id تشکیل شده . برای این چرا راه حلی هست ؟ یه سوال دیگه هم دارم ، من برای public key از hash یوزرنیم و user_id استفاده می کنم و برای special هم از remoteIp و useragent و یکسری اطلاعات از مرورگر ( که همه ی اینا را hash می کنم ) استفاده می کنم . به نظر تون خوبه این ؟