انتقل إلى محتوى الدرس

Verifying Logins with password_verify التحقق عند تسجيل الدخول بـ password_verify

خزّن كلمات مرور المستخدمين بأمان تام في PHP 8 باستخدام password_hash وخوارزميات Bcrypt وArgon2id ودالة التحقق password_verify.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

لأن كل تجزئة تحتوي على ملح مختلف، لا يمكنك أبداً التحقق من كلمة المرور بمقارنة النصوص بالمعامل ===، بل يجب دائماً استدعاء الدالة password_verify($plainPassword, $storedHash).

  • تستخرج دالة password_verify() الخوارزمية والتكلفة والملح من $storedHash تلقائياً، وتجري المقارنة في زمن ثابت.
  • تحمي المقارنة ذات الزمن الثابت من هجمات التوقيت التي تقيس فروق الاستجابة بالميكروثانية لاستنتاج صحة الأحرف.
  • إذا لم يُعثر على البريد الإلكتروني في قاعدة البيانات، نفّذ password_verify() على تجزئة وهمية لمنع كشف وجود الحسابات عبر فرق الوقت.

ترجع دالة password_verify() القيمة true فقط عندما يطابق النص المدخل كلمة المرور الأصلية التي أُنشئت منها التجزئة.

مخطط تدفق التنفيذ العملي لقسم التحقق عند تسجيل الدخول بـ password_verify في لغة PHP
PHP
<?php
$storedHash = password_hash("CorrectHorse99!", PASSWORD_DEFAULT);

$okLogin = password_verify("CorrectHorse99!", $storedHash);
$badLogin = password_verify("WrongGuess123", $storedHash);

echo "Valid password   : " . ($okLogin ? "MATCH" : "FAIL") . "\n";
echo "Invalid password : " . ($badLogin ? "MATCH" : "FAIL") . "\n";