شرح صفوف ومحتوى الفقرة
لأن كل تجزئة تحتوي على ملح مختلف، لا يمكنك أبداً التحقق من كلمة المرور بمقارنة النصوص بالمعامل ===، بل يجب دائماً استدعاء الدالة password_verify($plainPassword, $storedHash).
- تستخرج دالة
password_verify()الخوارزمية والتكلفة والملح من$storedHashتلقائياً، وتجري المقارنة في زمن ثابت. - تحمي المقارنة ذات الزمن الثابت من هجمات التوقيت التي تقيس فروق الاستجابة بالميكروثانية لاستنتاج صحة الأحرف.
- إذا لم يُعثر على البريد الإلكتروني في قاعدة البيانات، نفّذ
password_verify()على تجزئة وهمية لمنع كشف وجود الحسابات عبر فرق الوقت.
ترجع دالة password_verify() القيمة true فقط عندما يطابق النص المدخل كلمة المرور الأصلية التي أُنشئت منها التجزئة.
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";