• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
محدود کردن طول پسورد - یک کار اشتباه و احمقانه
#1
در خیلی سایتها و سیستمها میان و حداکثر طول پسورد رو به چند ده کاراکتر محدود میکنن. اما چرا؟

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

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

بخاطر همین بنده حداکثر طول پسورد در پروژهء خودم رو برابر 100 کاراکتر قرار دادم. تازه الان فکر میکنم بهتره بیشترش کنم! مثلا 500 کاراکتر چطوره؟ زیاد کردنش ضرر خاصی نداره بنظرم. حالا خیلی هم زیاد نمیذاریم که از نظرهای دیگه شاید مشکلی پیش بیاد، ولی فکر میکنم یه محدودیت هایی مثل 20 کاراکتر و 30 کاراکتر واقعا درست نیست. تازه بعضی سایتها محدودیت کمتر از این میذارن. واقعا خنده داره این کار. از یک طرف میگن پسورد قوی باشه و مثلا حداقل 6 کاراکتر باشه و از اونور مثلا حداکثر طولش رو به 15 کاراکتر محدود میکنن! (لابد منظورشون اینه که دیگه خیلی هم قوی نباشه!!)
  پاسخ
تشکر شده توسط : Reza cyletech oia Atabak
#2
کدوم سایت؟ کی کجا؟ Huh
ولی محدودیت رو باید گذاشت حالا 100 تا یا 500 تا یه چیزی باشه. چون الگوریتم های هش می تونن سنگین باشن. ولی نه دیگه مثلا ۲۰ تا یا ۳۰ تا کاکتر
  پاسخ
تشکر شده توسط : Atabak
#3
با vejmad موافقم. مثلاً hotmail.com من نمیتونم پسورد اصلیمو وارد کنم. یا خیلی سایت های دیگه. کاملاً بنظر منم اینکار اشتباهه. خودشون دستی درصد ایمنی رو میارن پایین
غایب
  پاسخ
تشکر شده توسط : euruse
#4
ممکنه بخاطر سنگینی دیتابیس و الگوریتم هایی که مورد استفاده قرار میدند باشه :-؟؟
  پاسخ
تشکر شده توسط :
#5
(۱۳۹۱ خرداد ۲۴, ۰۵:۵۹ ب.ظ)Mr.M4st3r نوشته: ممکنه بخاطر سنگینی دیتابیس و الگوریتم هایی که مورد استفاده قرار میدند باشه :-؟؟

یعنی مثلا ۱۰۰ کاراکتر چه سنگینی می تونه داشته باشه؟
  پاسخ
تشکر شده توسط :
#6
این پست و نقل قولها در فروم برنامه نویس بود که بخاطر اینکه فکر میکنم محتوی نکات خوبی هست در اینجا هم کپی میکنم:

djsaeedkhan;1525573 نوشته: سلام
حرف شما درست است ولی بیشتر کاربران مگه می خوان پسورد 20کاراکتری داشته باشن.
منظور شما از این گفته واضح نیست.
بالاخره باید محدودیت 20 تا و 30 تا بذاریم یا نه؟
اگر مثلا 200 کاراکتر رو اجازه بدیم اونایی که میخوان پسورد 20 تایی انتخاب کنن که محدود نمیشن. ولی عکسش برقرار نیست.
اینم که بیشتر کاربران یک کاری میکنن دلیل نمیشه. بیشتر کاربران اطلاعات کافی ندارن و بقدر کافی احتیاط نمیکنن.

نقل قول:حالا به نظر من اگر سایتی میاد محدودیت میزاره (به نظر من) بیشتر بخاطر این هست هم کاربر نتونه رشته های بیخودی، مثلا یه متن بذاره.
منظورت از رشتهء بیخودی و متن دقیقا چیه مثلا و چرا اشکال داره؟
Passphrase ها خودشون متشکل از جملات هستن (یا میتونن باشن).
اصطلاحات کلی و مبهمی مثل «بیخودی» معنی خاصی نمیده! برای هرچیزی نیاز به دلیل و اثبات است.

نقل قول:همچنین کسی نتونه بیاد کد های اسکریپتی رو در کادر وارد کنه. اینجوری تا حدی امنیت برقرار میشه.
برقراری امنیت از لحاظ Injection نیاز به محدود کردن طول ورودی نداره. با رعایت اصول و روشهای مربوطه امنیت کامل برقرار میشه.
حالا بعضی ها اگر به این دلیل چنین محدودیت هایی وضع میکنن ضعف از دانش و بینش و توانایی خودشونه، و لزوما کار درستی نمیکنن.

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

نقل قول:همچنین هرچه رشته بیشتر باشه ممکنه هش شدن فضای بیشتری در دیتابیس بگیره
طول خروجی هش ثابته و ارتباطی به طول رشتهء ورودی نداره.

نقل قول: حالا شما بجای اینکه بیای 500 کاراکتر بذاری نامحدود بزار. چه کاریه؟ مگه چند نفر میان پسورد 500 کارکتری میذارن
حالا 500 تا مثال بود که بگم مشکلی نداره واقعا و نیازی به محدودیت جدی نیست. وگرنه بنظرم 200 تا کافی باشه.
من طول یک عبارت نسبتا طولانی انگلیسی رو اندازه گرفتم دیدم نزدیک 100 کاراکتره. گفتم شاید کسی بخواد عبارت طولانی تر از این هم بذاره. ممکنه متشکل از چند جمله باشه.

Bahram0110;1525574 نوشته: همون 20، 30 تا کافیه خیلی وسواس نداشته باشید. اشتباه نیست، احمقانه هم نیست.
هیچ سند و دلیلی در گفتار شما دیده نمیشه که بتونه باعث اعتماد و پذیرش اون بشه.



راستی یک مطلب جالب و نسبتا مرتبط از متخصص معروف امنیت و رمزنگاری Bruce Schneier:

Simply, people can no longer remember passwords good enough to reliably defend against dictionary attacks, and are much more secure if they choose a password too complicated to remember and then write it down. We're all good at securing small pieces of paper. I recommend that people write their passwords down on a small piece of paper, and keep it with their other valuable small pieces of paper: in their wallet.
—Bruce Schneier, 2005

منبع: http://en.wikipedia.org/wiki/Password_strength

ترجمه: «بسادگی، مردم دیگر نمیتوانند پسوردهایی را که بقدر کافی خوب هستند تا بصورت قابل اعتمادی دربرابر حملات دیکشنری دفاع کنند بخاطر بسپارند، و آنها بسیار ایمن تر هستند اگر پسوردهایی را انتخاب کنند که بیش از حد برای بخاطر سپردن پیچیده هستند، و سپس آن پسوردها را یادداشت کنند. ما همه در حفظ امنیت قطعات کوچک کاغذ خوب هستیم. من توصیه میکنم که مردم پسوردهای خود را روی یک قطعهء کوچک کاغذ یادداشت کنند، و آنرا به همراه بقیهء قطعه کاغذهای ارزشمندشان نگهداری کنند: در کیف پولشان.»

------------------------------

این گفتهء Bruce Schneier نشون میده که نیاز به قوی تر شدن پسوردها چقدر نسبت به گذشته بیشتر شده (تازه این رو در سال 2005 گفته).
از این لحاظ واقعا جالبه چون از قدیم تاحالا و همینطور خیلی افراد و متخصصان دیگر در حال حاضر میگفتن و میگن که پسوردهاتون رو جایی یادداشت نکنید. اما نظر Bruce Schneier خلاف اینه و میگه پسوردهایی که اونقدر ساده باشن که بیشتر مردم بتونن به سادگی بخاطر بسپارن امروزه دارای امنیت کافی نیستن (با وجود حمله هایی که هست و پیشرفت های زیادی که در زمینهء هک و کرک وجود داشته، نیازهای حداقل استحکام پسوردها هم افزایش پیدا کرده).
بنابراین بنده فکر میکنم وضع محدودیت های غیرضروری روی فرمت و طول پسورد واقعا کار حرفه ای نیست.
باید گذاشت پسورد بتونه تقریبا هر کاراکتر و هر عبارتی رو داشته باشه، و محدودیت طول هم فکر میکنم حداقل باید تا 100 یا 200 کاراکتر رو اجازه داد. تازه کاراکتر هم منظور کاراکتر یونیکد هست که هر کاراکتر اون میتونه چند بایت باشه. یک نفر باید بتونه مثلا یک یا چند جمله به زبان فارسی رو بعنوان پسورد خودش قرار بده. یک شاعر باید بتونه یک بیت از یک شعر رو در پسورد خودش داشته باشه. یک برنامه نویس باید بتونه یک خط کد برنامه نویسی رو در پسورد خودش داشته باشه. خلاصه هرکس هرچیزی رو که میتونه در ایجاد یک پسورد قوی و در عین حال طوری که بتونه راحت بخاطر بسپاره و استفاده کنه بکار ببره. چون هرچی محدودهء انتخاب پسوردها بیشتر باشه تعداد حالتهای ممکن بیشتر میشه و آنتروپی و امنیت بالا میره. البته بنده نمیگم مثلا یک کد برنامه نویسی معروف مثل <script>alert('XSS');</script> رو بدون هیچ تغییری بعنوان پسورد بکار ببریم. چون طبیعتا چنین پسوردی هم میتونه ضعیف باشه و به دیکشنری های کرک اضافه بشه. ولی میشه اون رو مقداری تغییر داد و سفارشی کرد یا بعنوان بخشی از یک پسورد بکار برد. بهرحال هرچی گزینه های ممکن بیشتر باشن در مجموع فضای حالت پسوردهای ممکن بزرگتر میشه که این به نفع امنیت عمومی هست.
  پاسخ
تشکر شده توسط : oia cyletech
#7
البته vejmad محدودیت نذاشتن هم اشتباه هست. چون مثلا محدودیت نمی زاریم بعد مثلا تنظیمات php هم اینطوره که تا ۲۰ مگ رو میزاره ارسال کنی. بعد طرف ۲۰ مگ رشته رو میفرسته برای ما و ما با خیال راحت روش هش (که بعضی وقتها هم چند مرجله ای و کدینگ های سنگین هم ممکنه روش انجام بشه) رو بزنیم که فاتحه سیستم خوندست. به نظرم محدودیت باشه. ولی می تونه تا ۵۰۰ کاراکتر یا بیشتر که مطمئن بشیم به کاربر لطمه ای نمی زنه
  پاسخ
تشکر شده توسط : cyletech oia
#8
فیلدی که برای ذخیره پسورد در دیتابیس انتخاب می شه خودش محدودیت میاره
معمولا فیلد پسورد رو varchar میزاریم که محدوده به 255 کاراکتر.
کد:
// 255 char
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrssssssssssttttttttttuuuuuuuuuuvvvvvvvvvvwwwwwwwwwwxxxxxxxxxxyyyyyyyyyyzzzzz

500 کارکتر مربوط به چه فیلدیه؟
  پاسخ
تشکر شده توسط :
#9
نقل قول:معمولا فیلد پسورد رو varchar میزاریم که محدوده به 255 کاراکتر.
اشتباه میکنی. واسه پسورد (بهینه تر) اینه که اول بدونی اون هشی که میکنی چقدر طول کاراکتر داره بعد CHAR با همون تعداد کاراکتر براش ستون بسازی.

نقل قول:500 کارکتر مربوط به چه فیلدیه؟

نقل قول:CHAR( ) A fixed section from 0 to 255 characters long.
VARCHAR( ) A variable section from 0 to 255 characters long.
TINYTEXT A string with a maximum length of 255 characters.
TEXT A string with a maximum length of 65535 characters.
BLOB A string with a maximum length of 65535 characters.
MEDIUMTEXT A string with a maximum length of 16777215 characters.
MEDIUMBLOB A string with a maximum length of 16777215 characters.
LONGTEXT A string with a maximum length of 4294967295 characters.
LONGBLOB A string with a maximum length of 4294967295 characters.

TINYINT( ) -128 to 127 normal
0 to 255 UNSIGNED.
SMALLINT( ) -32768 to 32767 normal
0 to 65535 UNSIGNED.
MEDIUMINT( ) -8388608 to 8388607 normal
0 to 16777215 UNSIGNED.
INT( ) -2147483648 to 2147483647 normal
0 to 4294967295 UNSIGNED.
BIGINT( ) -9223372036854775808 to 9223372036854775807 normal
0 to 18446744073709551615 UNSIGNED.
FLOAT A small number with a floating decimal point.
DOUBLE( , ) A large number with a floating decimal point.
DECIMAL( , ) A DOUBLE stored as a string , allowing for a fixed decimal point.
http://www.htmlite.com/mysql003.php
غایب
  پاسخ
تشکر شده توسط :
#10
فراموش کردم که طول هش ثابته! Smile
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان