التجزئة (Hashing) في Laravel

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

مقدمة

تقدم واجهة التجزئة الخاصة بإطار Laravel تجزئة Bcrypt و Argon2 آمنة لتخزين كلمات مرور المستخدم. إذا كنت تستخدم الصنفين الداخليين ‎(Built-in classes)‎ LoginController و RegisterController المتضمنين مع تطبيق Laravel الخاص بك، فإنهما يستخدمان Bcrypt للتسجيل والاستيثاق تلقائيًا.

ملاحظة: يعدّ Bcrypt خيارًا رائعًا لتجزئة كلمات المرور لأن "عامل العمل" الخاص به قابل للتعديل، مما يعني أنه يمكن زيادة الوقت المستغرق لإنشاء تجزئة كلما زادت طاقة المعدات.

الضبط

يُضبط محرك تشغيل التجزئة التلقائي الخاص بتطبيقك في ملف الإعدادات config/hashing.php. يوجد حاليا محركي تشغيل معتمدين : Bcrypt و Argon2.

تحذير: محرك التشغيل Argon2 يتطلب PHP 7.2.0 فما فوق.

الاستخدام الأساسي

يمكنك تجزئة كلمة مرور عن طريق استدعاء تابع الإنشاء في واجهة التجزئة.
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;

class UpdatePasswordController extends Controller
{

   /**
    * تحديث كلمة مرور المستخدم.
    *
    * @مدخلات  طلب $request
    * @تعيد الجواب
    */

   public function update(Request $request)
   {

      // التحقق من طول كلمة المرور الجديدة ...
       $request->user()->fill([
           'password' => Hash::make($request->newPassword)
       ])->save();
   }
}
?>

تعديل عامل العمل Bcrypt

إذا كنت تستخدم خوارزمية Bcrypt، سيمكنك تابع الإنشاء make من التحكم بعامل العمل للخوارزمية باستخدام الخيار rounds; مع ذلك، الوضع الافتراضي مقبول لأغلبية التطبيقات :
$hashed = Hash::make('password', [

   'rounds' => 12

]);

تعديل عامل العمل Argon2

إذا كنت تستخدم خوارزمية Argon2، سيمكنك تابع الإنشاء make من التحكم بعامل العمل للخوارزمية باستخدام الخيارات memory و time و threads; مع ذلك، الوضع الافتراضي مقبول لأغلبية التطبيقات :
$hashed = Hash::make('password', [

   'memory' => 1024,
   'time' => 2,
   'threads' => 2,

]);

ملاحظة: للمزيد من المعلومات حول هذه الخصائص، اطلع على وثائق PHP الرسمية.

التحقق من كلمة المرور مقابل التجزئة

يسمح لك تابع التحقق check من التحقق من أن سلسلة نص معينة تتطابق مع تجزئة معينة. ومع ذلك، إذا كنت تستخدم وحدة التحكم  LoginController المتضمنة مع Laravel، فربما لن تحتاج إلى استخدام هذا مباشرة، لأن وحدة التحكم هذه تقوم تلقائيا باستدعاء هذا التابع:
if (Hash::check('plain-text', $hashedPassword)) {

  // كلمات المرور تطابق ...

}

التحقق من ما إذا كانت كلمة مرور بحاجة لإعادة تجزئة

تسمح لك الدالة needsRehash بتحديد ما إذا كان عامل العمل المستخدم من طرف المجزأ قد تغير منذ أن تمت تجزئة كلمة المرور:
if (Hash::needsRehash($hashed)) {

   $hashed = Hash::make('plain-text');

}

مصادر