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

گناهان بزرگی که نباید انجام دهید

  • به هیچ عنوان کاربر را در انتخاب کاراکترهای رمز عبور خود محدود نکنید، این کار بسیار احمقانه است.
  • به هیچ عنوان محدودیتی در مورد طول رمزعبور اعمال نکنید، اگر کاربر دوست دارد رمز عبوری ۳۰ حرفی داشته باشد شما نباید مانع آن شوید.
  • رمزعبور کاربران خود را به هیچ وجه بصورت متنی در جایی دخیزه نکنید، شیطان همه جا حضور دارد و براحتی رمزهای هش نشده را میتواند بدزدد.
  • احمقانه عمل نکنید، رمز یک کاربر چیزی نیست که بخواهید آن را به کسی (حتی خود کاربر) ایمیل یا پیامک کنید.
  • اگر فکر میکنید با هش `MD5` یا `SHA1` توانسته‌اید رمزها را در امنیت نگه دارید کاملا در اشتباهید، تنها یک سرچ در گوگل گواه این اشتباه است.

بهشت برین در انتظار شماست

  • بدون شک `scrypt` و بعد از آن `bcrypt` الگوریتم‌هایی هستند که در این برهه از زمان میتوانند آرامش خاطری برای شما باشند.
  • بهتر آن است که کاربران خود را مجبور به تایین رمزهایی با حداقل شش کاراکتر و حاوی حروف و اعداد بکنید.

نه شخص/ماهیت‌ ای که هک میشه ضعیف و ناکارامده و نه هک کننده قدرتمند و آگاه!

`scrypt` و چند نکته دیگر

چرا باید از `scrypt` برای هش رمزها استفاده کنیم؟ خیلی ساده بخوام بگم، چون این الگوریتم علاوه بر کلمه رمز که قراره هش بشه، چهار ورودی دیگه هم میگیره که مهمترین اونها یک رشته بعنوان "نمک" `salt` است، که باعث تغییر هش نهایی میشه، ساده‌تر بگم یک کلمه رمز با نمک های مختلف هش‌ یکسانی نخواهد داشت و این یعنی به این راحتی ها نمیتوان برای آن جدول حالت درست کرد.

  • اگه `PHP` کار هستید، سری به اینجا بزنید و ماژول این الگوریتم رو نصب کنید و استفاده کنید.
  • بد نیست سری به این آدرس بزنید در مورد حملات زمانی (Timing Attack) اطلاعی حاصل کنید.
  • همیشه قبل از اینکه داده‌ای که از کاربر دریافت کردید رو توی پایگاه‌داده دخیره کنید اونو بررسی کنید.
  • بدونید که فقط شما نیستید که ممکنه مورد حمله هکرها قرار بگیرید، بزرگان دنیای مجازی بارها و بارها مورد حمله قرار گرفته‌اند و گاها دیدیم که اونا کاهایی بس احمقانه‌تر از کارهایی که ما انجام میدیم انجام دادن. نمونه بارزش نزدیک به ما Heartbleed بود.