0Pricing
PHP Academy · درس

تخزين كلمات المرور بأمان

جزّئوا كلمات المرور باستخدام password_hash وتحققوا منها باستخدام password_verify

تخزين كلمات المرور بأمان درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لا تخزّن كلمات المرور بنص واضح

يعني تخزين كلمات المرور بنص واضح أن اختراق قاعدة البيانات سيكشف كلمة مرور كل مستخدم. خزّن دائمًا تجزئة تشفيرية، ويفضل أن تكون باستخدام bcrypt أو Argon2id أو scrypt.

password_hash()

تنشئ الدالة المضمنة password_hash() في PHP تجزئة آمنة مع تضمين salt عشوائي في الناتج.

<?php
$hash = password_hash("mysecretpassword", PASSWORD_BCRYPT);
// Output: $2y$10$... (includes algorithm, cost, salt, hash)

password_verify()

تحقّق من كلمة مرور بنص واضح مقابل تجزئة مخزنة.

<?php
$hash  = "$2y$10$abcdef...";
$valid = password_verify("mysecretpassword", $hash);
if ($valid) {
    echo "Correct password!";
}

خيارات الخوارزميات

يدعم PHP ما يلي:

  • PASSWORD_BCRYPT — مدعوم على نطاق واسع، مع حد يبلغ 72 بايت
  • PASSWORD_ARGON2I — يتطلب قدرًا كبيرًا من الذاكرة، في PHP 7.2 فأحدث
  • PASSWORD_ARGON2ID — موصى به، ويقاوم هجمات GPU، في PHP 7.3 فأحدث
  • PASSWORD_DEFAULT — يستخدم bcrypt حاليًا، وقد يتغير في إصدارات PHP المستقبلية

عامل التكلفة

يتحكم عامل التكلفة في مدى بطء حساب التجزئة. تؤدي التكلفة الأعلى إلى إبطاء هجمات القوة الغاشمة. تبلغ تكلفة bcrypt الافتراضية 10.

<?php
$hash = password_hash("secret", PASSWORD_BCRYPT, ["cost" => 12]);
// Cost 12 takes ~0.5s on typical hardware — acceptable for login

password_needs_rehash()

بعد ترقية PHP أو تغيير إعدادات التكلفة، تحقّق مما إذا كانت التجزئات الحالية تحتاج إلى ترقية.

<?php
if (password_verify($plain, $storedHash) &&
    password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
    $user->update(["password" => password_hash($plain, PASSWORD_DEFAULT)]);
}

واجهة Hash في Laravel

يغلّف Laravel الدالة password_hash في واجهة Hash، مع استخدام bcrypt افتراضيًا.

<?php
use Illuminate\Support\Facades\Hash;

$hash  = Hash::make("mysecretpassword");
$valid = Hash::check("mysecretpassword", $hash); // true

Argon2 في Laravel

اضبط Laravel لاستخدام Argon2id في config/hashing.php.

// config/hashing.php
"driver" => "argon2id",

معالجة Salt

تضمّن دوال التجزئة الحديثة في PHP قيمة salt عشوائية تشفيريًا تلقائيًا. لا تنفّذ آلية salt الخاصة بك مطلقًا، فمن السهل تنفيذها بطريقة خاطئة.

Pepper (سر على مستوى التطبيق)

يمكن مزج سر إضافي اختياري، يُسمى pepper ويُخزَّن خارج قاعدة البيانات، قبل إجراء التجزئة. وحتى إذا سُرقت قاعدة البيانات، فلن يتمكن المهاجم من تنفيذ هجوم القوة الغاشمة دون pepper.

مقارنة آمنة زمنيًا

تستخدم password_verify() مقارنة بزمن ثابت داخليًا، مما يمنع هجمات التوقيت. لا تقارن التجزئات باستخدام == مطلقًا.

الملخص

استخدم password_hash() مع PASSWORD_DEFAULT أو PASSWORD_ARGON2ID. تحقّق باستخدام password_verify(). وأعد إنشاء التجزئة عند تسجيل الدخول إذا لزم الأمر. لا تخزّن كلمات المرور بنص واضح مطلقًا، ولا تستخدم MD5 أو SHA1 لكلمات المرور.

تحقق سريع

ما الدالة التي تتحقق من كلمة مرور مقابل تجزئة أنشأها PHP؟

الأسئلة الشائعة

هل درس «تخزين كلمات المرور بأمان» مجاني؟

نعم — نص درس «تخزين كلمات المرور بأمان» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «تخزين كلمات المرور بأمان»؟

جزّئوا كلمات المرور باستخدام password_hash وتحققوا منها باستخدام password_verify تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تخزين كلمات المرور بأمان»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. منع البرمجة النصية عبر المواقع (XSS)
  2. حقن SQL والاستعلامات ذات المعاملات
  3. الحماية من CSRF
  4. تخزين كلمات المرور بأمان
← العودة إلى PHP Academy