الفرق بين المراجعتين لصفحة: «Laravel/hashing»
أنشأ الصفحة ب' <noinclude>{{DISPLAYTITLE:التجزئة في Laravel}}</noinclude> == المقدمة == تقدم واجهة التجزئة الخاصة بإطار Laravel تجزئة...' |
رؤيا-بنعطية (نقاش | مساهمات) لا ملخص تعديل |
||
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:التجزئة (Hashing) في Laravel}}</noinclude> | |||
<noinclude>{{DISPLAYTITLE:التجزئة في Laravel}}</noinclude> | == مقدمة == | ||
تقدم واجهة التجزئة الخاصة بإطار [[Laravel]] تجزئة <code>Bcrypt</code> و <code>Argon2</code> آمنة لتخزين كلمات مرور المستخدم. إذا كنت تستخدم الصنفين الداخليين <code>(Built-in classes) LoginController</code> و <code>RegisterController</code> المتضمنين مع تطبيق [[Laravel]] الخاص بك، فإنهما يستخدمان Bcrypt للتسجيل والاستيثاق تلقائيًا. | |||
== | |||
تقدم واجهة التجزئة الخاصة بإطار Laravel تجزئة Bcrypt و Argon2 آمنة لتخزين كلمات مرور المستخدم. إذا كنت تستخدم الصنفين الداخليين (Built-in classes) LoginController و RegisterController المتضمنين مع تطبيق Laravel الخاص بك، فإنهما يستخدمان Bcrypt للتسجيل والاستيثاق تلقائيًا. | |||
ملاحظة: يعدّ Bcrypt خيارًا رائعًا لتجزئة كلمات المرور لأن "عامل العمل" الخاص به قابل للتعديل، مما يعني أنه يمكن زيادة الوقت المستغرق لإنشاء تجزئة كلما زادت طاقة المعدات. | ملاحظة: يعدّ Bcrypt خيارًا رائعًا لتجزئة كلمات المرور لأن "عامل العمل" الخاص به قابل للتعديل، مما يعني أنه يمكن زيادة الوقت المستغرق لإنشاء تجزئة كلما زادت طاقة المعدات. | ||
== الضبط == | == الضبط == | ||
يُضبط محرك تشغيل التجزئة التلقائي الخاص بتطبيقك في ملف الإعدادات config/hashing.php. يوجد حاليا محركي تشغيل معتمدين : Bcrypt و Argon2. | يُضبط محرك تشغيل التجزئة التلقائي الخاص بتطبيقك في ملف الإعدادات <code>config/hashing.php</code>. يوجد حاليا محركي تشغيل معتمدين : Bcrypt و Argon2. | ||
تحذير: محرك التشغيل Argon2 يتطلب PHP 7.2.0 فما فوق. | تحذير: محرك التشغيل Argon2 يتطلب PHP 7.2.0 فما فوق. | ||
== الاستخدام الأساسي == | == الاستخدام الأساسي == | ||
يمكنك تجزئة كلمة مرور عن طريق استدعاء تابع الإنشاء في واجهة التجزئة. | يمكنك تجزئة كلمة مرور عن طريق استدعاء تابع الإنشاء في واجهة التجزئة.<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
سطر 20: | سطر 17: | ||
use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||
use Illuminate\Support\Facades\Hash; | use Illuminate\Support\Facades\Hash; | ||
use App\Http\Controllers\Controller; | use App\Http\Controllers\Controller; | ||
class UpdatePasswordController extends Controller | class UpdatePasswordController extends Controller | ||
{ | { | ||
/** | /** | ||
* تحديث كلمة مرور المستخدم. | * تحديث كلمة مرور المستخدم. | ||
* | * | ||
* @مدخلات طلب $request | * @مدخلات طلب $request | ||
* @تعيد الجواب | * @تعيد الجواب | ||
*/ | */ | ||
public function update(Request $request) | public function update(Request $request) | ||
{ | { | ||
// التحقق من طول كلمة المرور الجديدة ... | // التحقق من طول كلمة المرور الجديدة ... | ||
$request->user()->fill([ | $request->user()->fill([ | ||
'password' => Hash::make($request->newPassword) | 'password' => Hash::make($request->newPassword) | ||
])->save(); | ])->save(); | ||
} | } | ||
} | |||
?> | |||
</syntaxhighlight> | |||
=== تعديل عامل العمل Bcrypt === | === تعديل عامل العمل Bcrypt === | ||
إذا كنت تستخدم خوارزمية | إذا كنت تستخدم خوارزمية <code>Bcrypt</code>، سيمكنك تابع الإنشاء <code>make</code> من التحكم بعامل العمل للخوارزمية باستخدام الخيار <code>rounds</code>; مع ذلك، الوضع الافتراضي مقبول لأغلبية التطبيقات :<syntaxhighlight lang="php"> | ||
$hashed = Hash::make('password', [ | $hashed = Hash::make('password', [ | ||
سطر 65: | سطر 50: | ||
]); | ]); | ||
</syntaxhighlight> | |||
=== تعديل عامل العمل Argon2 === | === تعديل عامل العمل Argon2 === | ||
إذا كنت تستخدم خوارزمية | إذا كنت تستخدم خوارزمية <code>Argon2</code>، سيمكنك تابع الإنشاء <code>make</code> من التحكم بعامل العمل للخوارزمية باستخدام الخيارات <code>memory</code> و <code>time</code> و <code>threads</code>; مع ذلك، الوضع الافتراضي مقبول لأغلبية التطبيقات :<syntaxhighlight lang="php"> | ||
$hashed = Hash::make('password', [ | $hashed = Hash::make('password', [ | ||
'memory' => 1024, | 'memory' => 1024, | ||
'time' => 2, | 'time' => 2, | ||
'threads' => 2, | 'threads' => 2, | ||
]); | ]); | ||
</syntaxhighlight> | |||
ملاحظة: للمزيد من المعلومات حول هذه الخصائص، اطلع على وثائق PHP الرسمية. | ملاحظة: للمزيد من المعلومات حول هذه الخصائص، اطلع على وثائق [[PHP]] الرسمية. | ||
=== التحقق من كلمة المرور مقابل التجزئة === | === التحقق من كلمة المرور مقابل التجزئة === | ||
يسمح لك تابع التحقق check من التحقق من أن سلسلة نص معينة تتطابق مع تجزئة معينة. ومع ذلك، إذا كنت تستخدم وحدة التحكم | يسمح لك تابع التحقق <code>check</code> من التحقق من أن سلسلة نص معينة تتطابق مع تجزئة معينة. ومع ذلك، إذا كنت تستخدم وحدة التحكم <code>LoginController</code> المتضمنة مع Laravel، فربما لن تحتاج إلى استخدام هذا مباشرة، لأن وحدة التحكم هذه تقوم تلقائيا باستدعاء هذا التابع:<syntaxhighlight lang="php"> | ||
if (Hash::check('plain-text', $hashedPassword)) { | if (Hash::check('plain-text', $hashedPassword)) { | ||
سطر 89: | سطر 72: | ||
} | } | ||
</syntaxhighlight> | |||
=== التحقق من ما إذا كانت كلمة مرور بحاجة لإعادة تجزئة === | === التحقق من ما إذا كانت كلمة مرور بحاجة لإعادة تجزئة === | ||
تسمح لك الدالة needsRehash بتحديد ما إذا كان عامل العمل المستخدم من طرف المجزأ قد تغير منذ أن تمت تجزئة كلمة المرور: | تسمح لك الدالة <code>needsRehash</code> بتحديد ما إذا كان عامل العمل المستخدم من طرف المجزأ قد تغير منذ أن تمت تجزئة كلمة المرور:<syntaxhighlight lang="php"> | ||
if (Hash::needsRehash($hashed)) { | if (Hash::needsRehash($hashed)) { | ||
سطر 98: | سطر 81: | ||
} | } | ||
</syntaxhighlight> | |||
== مصادر == | == مصادر == | ||
* صفحة Hashing في توثيق Laravel الرسمي. | * [https://laravel.com/docs/5.6/hashing صفحة Hashing في توثيق Laravel الرسمي.] | ||
[[تصنيف:Laravel|{{SUBPAGENAME}}]] | |||
[[تصنيف:Laravel Security|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 14:00، 24 أكتوبر 2018
مقدمة
تقدم واجهة التجزئة الخاصة بإطار 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');
}