التفويض والمصادقة في PHP: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التفويض والمصادقة في PHP: كيفية حماية موقعك



الأمان هو أحد الجوانب الرئيسية لأي تطبيق ويب. في PHP، يتم تنفيذ المصادقة (التحقق من هوية المستخدم) والتفويض (تحديد صلاحيات الوصول) باستخدام أدوات مدمجة: الجلسات، الكوكيز، تجزئة كلمات المرور، والعمل مع قواعد البيانات. في هذه المقالة، سنستعرض الدورة الكاملة لإنشاء نظام تسجيل الدخول والتسجيل وتحديد الصلاحيات في PHP.



1. المفاهيم الأساسية



  • المصادقة — عملية التحقق مما إذا كان المستخدم هو من يدّعي (عادةً باستخدام اسم المستخدم وكلمة المرور).
  • التفويض — التحقق مما إذا كان المستخدم المُصادَق عليه لديه الحق في تنفيذ إجراء معين (مثل الوصول إلى لوحة التحكم).
  • الجلسة — مخزن بيانات مؤقت على الخادم، مرتبط بزائر معين عبر معرف فريد (session ID).
  • تجزئة كلمات المرور — تحويل كلمة المرور إلى سلسلة غير قابلة للعكس لتخزين آمن في قاعدة البيانات.


2. تسجيل المستخدم



الخطوة الأولى — إنشاء نموذج التسجيل ومعالج البيانات. لا يتم تخزين كلمة المرور أبدًا في شكل نصي صريح — نستخدم الدالة password_hash().



2.1. نموذج التسجيل (register.php)



<form method="post" action="register_handler.php">    <input type="text" name="username" placeholder="اسم المستخدم" required>    <input type="email" name="email" placeholder="البريد الإلكتروني" required>    <input type="password" name="password" placeholder="كلمة المرور" required>    <button type="submit">تسجيل</button></form>


2.2. معالج التسجيل (register_handler.php)



<?php// الاتصال بقاعدة البيانات (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$username = $_POST['username'];$email = $_POST['email'];$password = password_hash($_POST['password'], PASSWORD_BCRYPT); // نقوم بالتجزئة

$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->execute([$username, $email, $password]);

header('Location: login.php');?>


استخدم PASSWORD_BCRYPT — فهو يُنشئ تلقائيًا ملحًا (salt) ويعتبر آمنًا بما فيه الكفاية.



3. المصادقة (تسجيل الدخول)



عند تسجيل الدخول، نقوم بمقارنة كلمة المرور المُدخلة مع التجزئة من قاعدة البيانات باستخدام password_verify() وننشئ جلسة.



3.1. نموذج تسجيل الدخول (login.php)



<form method="post" action="login_handler.php">    <input type="text" name="username" placeholder="اسم المستخدم" required>    <input type="password" name="password" placeholder="كلمة المرور" required>    <button type="submit">دخول</button></form>


3.2. معالج تسجيل الدخول (login_handler.php)



<?phpsession_start();$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$username = $_POST['username'];$password = $_POST['password'];

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();

if ($user && password_verify($password, $user['password'])) { // المصادقة ناجحة $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // للتفويض header('Location: dashboard.php');} else { echo "اسم المستخدم أو كلمة المرور غير صحيحة";}?>


4. التفويض (تحديد الصلاحيات)



بعد المصادقة، يحصل المستخدم على دور (مثل 'user', 'admin', 'moderator'). يتحقق التفويض من هذا الدور قبل تنفيذ الإجراءات.



4.1. التحقق البسيط من الدور



<?phpsession_start();

// نتحقق مما إذا كان المستخدم

توصيات