PDA

View Full Version : امنیت password



sara.ghavam
دوشنبه 18 مرداد 1395, 11:34 صبح
سلام دوستان گلم من برای ذخیره سازی password از MD5 استفاده میکنم اما میدونم که خیلی قوی نیست.

خواستم از
$this->load->library('encrypt'); استفاده کنم اما نشد در ضمن من در فایل config هم برای
$config['encryption_key'] یک کلید رمز که base64 هست براش ساختم و ست کردم

اما وقتی که میزنم

$encrypted_string=$this->encrypt->encode($msg);

اطلاعات رو رمز میکنه اما درست کار نمیکنه یعنی من از این طریق encode و decode کردم اما مثلا من رمز رو زده بودم 123456 اما وقتی که 123 هم میزدم وارد میشد.

لطفا کمکم کنید امنیت برام خیلی خیلی مهمه

numberone1
دوشنبه 18 مرداد 1395, 18:11 عصر
سلام

md5 از روش های encryption بهتره
ولی کد ایگنایتر در کل تابع های encryption مشکل داره . منم مشابه همین مشکل هارو باهاش داشتم .
راه بهتری که میتونی داشته باشی اینه که خودت یه helper بنویسی که هم crypt باشه و هم decrypt و داخلش هم از کلیدی که توی فایل config تعریف کردی استفاده کنی.
توی autoload اضافش کن بعد هر جا لازم داشتی خیلی راحت استفاده کن

plague
سه شنبه 19 مرداد 1395, 00:03 صبح
MD5 مشکلی نداره اگه کاربری پسورد 123456 بزنه دیگه مشکل خودشه !
البته اونم به این راحتی شکسته نمیشه ! ولی کتابخونه های آنلاینی وجود داره که مقدار MD5 شده رشته های زیادی رو ذخیره دارن و با یه مقایسه اون 123456 رو متوجه میشن .... اینجوری نیست که امنیتش پایین باشه MD5 و بتونن رمز گشاییش بکنن !

اگه میخای مطمئن تر بشی میتونی از SHA1 استفاده کنی که فکر میکنم 100 کاراکتر فضا میگیره (2 برابر MD5 )

numberone1
چهارشنبه 20 مرداد 1395, 03:37 صبح
MD5 مشکلی نداره اگه کاربری پسورد 123456 بزنه دیگه مشکل خودشه !
البته اونم به این راحتی شکسته نمیشه ! ولی کتابخونه های آنلاینی وجود داره که مقدار MD5 شده رشته های زیادی رو ذخیره دارن و با یه مقایسه اون 123456 رو متوجه میشن .... اینجوری نیست که امنیتش پایین باشه MD5 و بتونن رمز گشاییش بکنن !

اگه میخای مطمئن تر بشی میتونی از SHA1 استفاده کنی که فکر میکنم 100 کاراکتر فضا میگیره (2 برابر MD5 )

تا اونجایی که من دیدم و میدونم قفل md5 شکسته شده. ولی راه حل اینه که مثلا 5000 دور یه رشته رو md5 l میکنن با یه حلقه foreach
استفاده از salt هم

sara.ghavam
چهارشنبه 20 مرداد 1395, 04:32 صبح
تا اونجایی که من دیدم و میدونم قفل md5 شکسته شده. ولی راه حل اینه که مثلا 5000 دور یه رشته رو md5 l میکنن با یه حلقه foreach
استفاده از salt هم
ممنونم گلم
میشه کدش رو برام بنویسید؟؟؟ من تازه کارم

plague
چهارشنبه 20 مرداد 1395, 16:32 عصر
تا اونجایی که من دیدم و میدونم قفل md5 شکسته شده. ولی راه حل اینه که مثلا 5000 دور یه رشته رو md5 l میکنن با یه حلقه foreach
استفاده از salt هم

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

در کل من خودم 1-2 ساله از sha1 استفاده میکنم ولی راه درست در هر انکریپشنی استفاده از salt هستش

negative60
چهارشنبه 20 مرداد 1395, 19:59 عصر
تا اونجایی که من دیدم و میدونم قفل md5 شکسته شده. ولی راه حل اینه که مثلا 5000 دور یه رشته رو md5 l میکنن با یه حلقه foreach
استفاده از salt هم

اطلاعات غلط منتشر نکنید md5 شکسته نشده

یکی‌ از دلایل ضعف md5 اینه که خیلی‌ سریع تولید می‌شه و با قدرت تراشه‌های امروزی می‌شه تعداد خیلی‌ زیادی هش md5 رو تو زمان کمی‌ تولید کرد که اگر طول پسورد بلند نباشه ممکنه باعث به دست آوردن پسورد بشه
نیاز به ۵۰۰۰ بار هش نیست!! اینطوری فقط سرور رو میخابونید
به طور مثل به این شکل بدون مصرف بیخود منابع سرور می‌شه از md5 استفاده کرد


$md5Hash = md5($username+$password+$salt);
$md5Hash = md5($username+$md5Hash+$password+$salt);
$md5Hash = md5($salt+$md5Hash+$password+$salt+$username+$md5H ash);
$result = md5Hash;

arash_fa
پنج شنبه 21 مرداد 1395, 01:10 صبح
در فایل system/libraries/encrypt.php تابع زیر را بیافزایید


public function en_pass($str,$key='') { if($key ===''){ $key = $this->get_key(); } $coding = md5(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_2 56, md5($str), $key, MCRYPT_MODE_CBC, md5(md5($str))))); return hash($this->_hash_type, $coding); }

مقدار زیر را در کانفیگ ست کنید


$config['encryption_key']

روش استفاده :


$this->load->helper('string');
$this->load->library('encrypt');
$password__nothash = $password = ($this->input->post('password',true));$sult = random_string();$password = $this->encrypt->en_pass($password,$sult);

پسورد هش شده و sult رادر دیتابیس نگه میدارید که بعد با این دو مورد بر گردونید. مثلا:


کاربر که لاگین میکند کوئری بزنید که رمز و sult رو بگیر جایی که یوزر نیمش username باشه حالا اگه اصلا هیچی نبود یعنی یوزرنیم اصلا نیست ارور میدید که اطلاعات اشتباهه

حالا اگر بود میاید رمزی که کاربر وارد کرده رو با گلیدی که از دیتابیس کرفتید مثل با هش میکنید و بررسی میکنید این هش شده با اون رمزی که از دیتابیس گرفتیم یکیه یا نه اگه بود که لاگین بشه



$this->load->helper('string');

numberone1
جمعه 22 مرداد 1395, 02:45 صبح
اطلاعات غلط منتشر نکنید md5 شکسته نشده

یکی‌ از دلایل ضعف md5 اینه که خیلی‌ سریع تولید می‌شه و با قدرت تراشه‌های امروزی می‌شه تعداد خیلی‌ زیادی هش md5 رو تو زمان کمی‌ تولید کرد که اگر طول پسورد بلند نباشه ممکنه باعث به دست آوردن پسورد بشه
نیاز به ۵۰۰۰ بار هش نیست!! اینطوری فقط سرور رو میخابونید
به طور مثل به این شکل بدون مصرف بیخود منابع سرور می‌شه از md5 استفاده کرد


$md5Hash = md5($username+$password+$salt);
$md5Hash = md5($username+$md5Hash+$password+$salt);
$md5Hash = md5($salt+$md5Hash+$password+$salt+$username+$md5H ash);
$result = md5Hash;

اطلاعات غلط منتشر نمیکنم
من یه ویدئو دیدم که این پروسه رو توش انجام دادن. این بحث جاش اینجا نیست. md5 هم ربطی به php و codeigniter نداره.
شما یک تحقیق و سرچ راجع به الگوریتم md5 و امنیت md5 تحقیق کن بعد بیا اینجا متهم به دادن اطلاعات غلط بکن ادمو
من تو سایت stackoverflow هم جواب های زیادی دیدم که توش گفته شده تنها md5 برای هش کردن پسورد کفایت نمیکنه
بازم توصیه میکنم بیشتر سرچ کنی و بیشتر تحقیق کنی قبل از اینکه اتهام بزنی :چشمک:

negative60
جمعه 22 مرداد 1395, 04:31 صبح
اطلاعات غلط منتشر نمیکنم
من یه ویدئو دیدم که این پروسه رو توش انجام دادن. این بحث جاش اینجا نیست. md5 هم ربطی به php و codeigniter نداره.
شما یک تحقیق و سرچ راجع به الگوریتم md5 و امنیت md5 تحقیق کن بعد بیا اینجا متهم به دادن اطلاعات غلط بکن ادمو
من تو سایت stackoverflow هم جواب های زیادی دیدم که توش گفته شده تنها md5 برای هش کردن پسورد کفایت نمیکنه
بازم توصیه میکنم بیشتر سرچ کنی و بیشتر تحقیق کنی قبل از اینکه اتهام بزنی :چشمک:

کجای صحبت من مربوط به پی‌اچ‌پی بوده؟
وقتی‌ منابع شما کامنت های stackoverflow و یک ویدئو باشه همین می‌شه که نا خواسته اطلاعات اشتباه رو به دیگران منتقل می‌کنید

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

numberone1
جمعه 22 مرداد 1395, 22:38 عصر
وقتی‌ منابع شما کامنت های stackoverflow و یک ویدئو باشه همین می‌شه که نا خواسته اطلاعات اشتباه رو به دیگران منتقل می‌کنید



باشه استاد
از این به بعد فقط به مطالب شما استناد میکنم !