متن خبر

آموزش برنامه نویسی - نکته سریع: چگونه یک رمز عبور را در PHP هش کنیم

آموزش برنامه نویسی - نکته سریع: چگونه یک رمز عبور را در PHP هش کنیم

اخبارآموزش برنامه نویسی - نکته سریع: چگونه یک رمز عبور را در PHP هش کنیم
شناسهٔ خبر: 266475 -




خبرکاو:

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

هر برنامه نویس PHP در مقطعی نیاز به نوشتن برنامه ای دارد که برای عملکرد صحیح به ورود کاربر متکی باشد. نام کاربری و رمز عبور معمولاً در یک پایگاه داده ذخیره می شوند و سپس برای احراز هویت استفاده می شوند. همانطور که می دانیم، گذرواژه ها هرگز نباید به صورت متن ساده در پایگاه داده ذخیره شوند: اگر پایگاه داده به خطر بیفتد، همه رمزهای عبور برای استفاده توسط عوامل مخرب باز خواهند شد. به همین دلیل است که باید یاد بگیریم که چگونه رمز عبور را هش کنیم.

توجه کنید که چگونه از کلمه هش به جای رمزگذاری استفاده می کنیم؟ این به این دلیل است که هش و رمزگذاری فرآیندهای بسیار متفاوتی هستند که اغلب اشتباه گرفته می شوند.

هش کردن

یک تابع هش رشته ای مانند mypassword123 را می گیرد و آن را به نسخه رمزگذاری شده رشته تبدیل می کند که به عنوان هش شناخته می شود. برای مثال، mypassword123 ممکن است برای تولید یک رشته به ظاهر تصادفی از اعداد و حروف مانند 9c87baa223f464954940f859bcf2e233 هش شود. هش کردن یک تابع یک طرفه است. هنگامی که چیزی را هش می کنید، یک رشته با طول ثابت دریافت می کنید - فرآیندی که به راحتی قابل برگشت نیست.

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

رمزگذاری

مانند هش کردن، رمزگذاری یک رشته ورودی را می گیرد و آن را به یک رشته به ظاهر تصادفی از اعداد و حروف تبدیل می کند. با این حال، رمزگذاری یک فرآیند برگشت پذیر است - اگر کلید رمزگذاری را بدانید. از آنجایی که این یک فرآیند برگشت پذیر است، انتخاب نامناسبی برای رمزهای عبور است، اما برای مواردی مانند پیام رسانی امن همتا به همتا عالی است.

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

نمک زدن

گذرواژه‌ها نیز باید قبل از هش شدن، نمک زده شوند. Salting عمل اضافه کردن یک رشته تصادفی به رمز عبور قبل از هش کردن آن است.

با نمک زدن گذرواژه‌ها، می‌توانیم از حملات فرهنگ لغت (که در آن مهاجم به طور سیستماتیک هر کلمه را در فرهنگ لغت به عنوان رمز عبور وارد می‌کند) و حملات جدول رنگین کمانی (که در آن مهاجم از فهرستی از هش‌های رمزهای عبور رایج استفاده می‌کند) جلوگیری کنیم.

علاوه بر نمک زدن، هنگام هش کردن باید از یک الگوریتم تا حدودی مطمئن استفاده کنیم. این بدان معناست که باید الگوریتمی باشد که قبلاً شکسته نشده باشد، و ترجیحاً الگوریتمی باشد که به جای یک الگوریتم عمومی (مانند SHA512) تخصصی باشد.

از سال 2023، الگوریتم های هش توصیه شده عبارتند از:

آرگون 2

رمزگذاری

bcrypt

PBKDF2

هش با PHP

هش کردن در PHP از زمان PHP5.5 با معرفی تابع password_hash() آسان شده است.

در حال حاضر، از bcrypt (به طور پیش فرض) استفاده می کند و از دیگر الگوریتم های هش مانند Argon2 پشتیبانی می کند. تابع password_hash() نیز از نمک زدن رمز عبور برای ما مراقبت می کند.

در پایان رمز عبور هش شده را برمی گرداند. هزینه و نمک به عنوان بخشی از هش برگردانده می شود.

به عبارت ساده، هزینه در هش رمز عبور به مقدار محاسباتی که برای تولید هش لازم است اشاره دارد. این مانند معیاری است که نشان می دهد ایجاد هش چقدر "دشوار" است. هر چه هزینه بالاتر باشد، دشوارتر است.

تصور کنید که می خواهید یک کیک درست کنید، و دستور پخت آن کیک می گوید: "تخم مرغ ها را به مدت پنج دقیقه بزنید". این "هزینه" درست کردن آن کیک است. اگر می‌خواهید کیک را «ایمن‌تر» کنید، می‌توانید دستور غذا را به این شکل تغییر دهید که «تخم‌مرغ‌ها را ده دقیقه بزنید». اکنون زمان بیشتری برای تهیه کیک نیاز است و این مانند افزایش "هزینه" تهیه کیک است.

همانطور که می توانیم در اسناد password_hash() بخوانیم:

... تمام اطلاعاتی که برای تأیید هش لازم است در آن گنجانده شده است. این به تابع [ password_verify() ] اجازه می‌دهد تا بدون نیاز به ذخیره‌سازی جداگانه برای اطلاعات salt یا الگوریتم، هش را تأیید کند.

این تضمین می کند که برای تأیید هش بک نیازی به ذخیره اطلاعات اضافی در پایگاه داده خود نداریم.

در عمل به این صورت است:

 <?php $password = "sitepoint" ; $hashed_password = password_hash ( $password , PASSWORD_DEFAULT ) ; if ( password_verify ( $password , $hashed_password ) ) { } else { }

اطلاعات بیشتر در مورد تابع password_hash() را می توانید در اینجا بیابید، در حالی که password_verify() می توانید در اینجا بیابید.

نتیجه

برای برنامه نویسان PHP مهم است که تفاوت بین هش کردن و رمزگذاری را درک کنند و از هش برای ذخیره رمزهای عبور برای محافظت از حساب های کاربری در برابر نفوذ استفاده کنند. معرفی تابع password_hash() در PHP 5.5 این امکان را برای برنامه نویسان فراهم کرد که به طور ایمن رمزهای عبور را با استفاده از الگوریتم های مختلف از جمله Argon2 و bcrypt هش کنند.

همانطور که تام باتلر در PHP و MySQL: Novice to Ninja توضیح داده است:

خوشبختانه برای ما، PHP شامل یک راه بسیار امن برای هش کردن رمزهای عبور است. این توسط افرادی ایجاد شده است که بیشتر از من یا شما در مورد این چیزها می دانند، و از نیاز توسعه دهندگانی مانند ما به درک کامل مشکلات امنیتی که ممکن است رخ دهد جلوگیری می کند. به همین دلیل، اکیداً توصیه می‌شود که از الگوریتم PHP داخلی برای هش کردن پسوردها به جای ایجاد الگوریتم خودمان استفاده کنیم.

مطمئن شوید که آن را در نظر می گیرید و در مورد آخرین الگوریتم های هش توصیه شده به روز می مانید تا از بهترین امنیت ممکن برای برنامه های خود اطمینان حاصل کنید.

خبرکاو

منبع

برچسب‌ها

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است