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

Secure Remember Me Persistent Tokens تصميم ميزة تذكرني بتوكن Selector و Validator

نفّذ نظام تسجيل دخول آمن والتحقق من الهوية وتجديد الجلسة وحراس حماية الصفحات وميزة تذكرني وتسجيل الخروج النظيف في PHP 8.
1 صفوف تعليمية
PHP
0 مشاهدة

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

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

لا تخزن أبداً معرف المستخدم أو كلمة مروره في كوكي "تذكرني"؛ بل استخدم توكن مقسوماً إلى selector:validator بحيث يُخزن فقط ناتج تجزئة validator في قاعدة البيانات.

  • يُستخدم selector للبحث السريع المفهرس عن سجل التوكن في قاعدة البيانات.
  • تُجزّأ قيمة validator العشوائية السرية بـ hash("sha256", $validator) وتقارن عبر hash_equals().
  • حتى لو تسرب جدول التوكنات من قاعدة البيانات، لن يتمكن المهاجم من تزوير كوكي الدخول!

يجمع الكوكي بين selector:validator بينما تحفظ قاعدة البيانات فقط تجزئة SHA-256 للمفتاح السري.

PHP
<?php

$selector = bin2hex(random_bytes(8));
$validator = bin2hex(random_bytes(16));
$cookieValue = "$selector:$validator";
$dbHashedValidator = hash('sha256', $validator);

[$inSel, $inVal] = explode(':', $cookieValue, 2);
$valid = hash_equals($dbHashedValidator, hash('sha256', $inVal));
echo "Remember-Me Token Verified: " . ($valid ? 'YES' : 'NO') . "\n";