البرمجة

تحسين أمان تسجيل الدخول في نظام PHP

في بادئ الأمر، يبدو أن الكود الذي تقدمه يستخدم استعلام SQL قديمًا باستخدام دالة mysql_query، وهي طريقة قديمة وغير آمنة للتفاعل مع قواعد البيانات. يفضل استخدام استعلامات معقولة ومعقمة لتجنب هجمات حقن SQL. يُفضل استخدام استعلامات PDO أو MySQLi المحدثة.

علاوة على ذلك، يتم استخدام الدالة session_start داخل شرط الـ if، وهذا قد يؤدي إلى مشاكل. من المفضل أن يتم استدعاء session_start في أعلى الملف قبل أي ناتج HTML أو ناتج PHP آخر.

لحل مشكلة تسجيل الدخول، يُفضل أيضًا فحص نتائج الاستعلام قبل تنفيذ أي عمليات بناءً على النتائج. يمكن ذلك عبر فحص عدد الصفوف المسترجعة من الاستعلام.

فيما يلي تعديلات على الكود لتحسينه:

php
session_start(); // اتصال بقاعدة البيانات (يفضل استخدام MySQLi أو PDO) $con = mysqli_connect("hostname", "username", "password", "database"); // فحص الاتصال if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); exit(); } // تحديد المستخدم وكلمة المرور بعد تعقيمها $username = mysqli_real_escape_string($con, $_POST["username"]); $password = mysqli_real_escape_string($con, $_POST["password"]); // استعلام آمن ومعقم $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($con, $query); // فحص نتائج الاستعلام if ($result) { $row_count = mysqli_num_rows($result); if ($row_count > 0) { // تم تسجيل الدخول بنجاح $_SESSION["username"] = $username; $_SESSION["password"] = $password; header('location: admin.html'); } else { // فشل تسجيل الدخول echo "Login Failed. Re Login"; } } else { // خطأ في الاستعلام echo "Query Failed: " . mysqli_error($con); } // إغلاق الاتصال بقاعدة البيانات mysqli_close($con); ?>

تأكد من استبدال “hostname” و”username” و”password” و”database” بالقيم الصحيحة لاتصالك بقاعدة البيانات. كما يُفضل التحقق من هيكلة جداول البيانات للتأكد من توافقها مع الاستعلام المستخدم.

المزيد من المعلومات

بالطبع، دعنا نضيف بعض المعلومات الإضافية ونقوم بتوضيح بعض النقاط الأساسية في الكود.

  1. استخدام استعلامات آمنة:
    يجب دائمًا استخدام استعلامات معقمة وآمنة لتفادي هجمات حقن SQL. في الكود المعدل، تم استخدام mysqli_real_escape_string لتعقيم المدخلات. ومع ذلك، يُفضل الانتقال إلى استخدام استعلامات محدثة باستخدام استعلامات معبأة (Prepared Statements) لضمان الأمان الأمثل.

  2. تنظيم الكود:
    في المثال المعدل، تم تنظيم الكود لجعله أكثر قراءةً وفهمًا. وقد تم تقديم تعليقات توضيحية للخطوات المهمة، مما يجعل الكود أكثر وضوحًا للقراء.

  3. فحص الاتصال بقاعدة البيانات:
    تم إضافة فحص للتأكد من نجاح الاتصال بقاعدة البيانات. إذا فشل الاتصال، سيتم عرض رسالة خطأ مناسبة.

  4. إغلاق الاتصال بقاعدة البيانات:
    تمت إضافة خطوة لإغلاق الاتصال بقاعدة البيانات بعد استخدامه. هذا يساعد في تحسين أداء التطبيق وتجنب تسرب الاتصالات.

  5. التعامل مع أخطاء الاستعلام:
    تمت إضافة كود للتحقق من نجاح أو فشل الاستعلام وعرض رسالة خطأ مناسبة في حالة الفشل.

  6. تحسين رسالة فشل تسجيل الدخول:
    تم تحسين رسالة فشل تسجيل الدخول لتكون أكثر وضوحًا ولتضمين رابط إعادة تسجيل الدخول.

  7. استخدام MySQLi بدلاً من MySQL:
    تم استخدام استعلامات MySQLi بدلاً من MySQL نظرًا لأن MySQLi تقدم ميزات أمان إضافية وتحسينات في الأداء.

  8. تفاعل مع الخطأ عن طريق معالجة الأخطاء:
    تمت إضافة معالجة للأخطاء للتحقق من نجاح أو فشل الاستعلام وعرض رسالة خطأ مناسبة في حالة الفشل.

  9. استخدام جلسات الـSession بشكل صحيح:
    تم استخدام session_start في أعلى الكود لضمان أن الجلسات تعمل بشكل صحيح وقبل أي إخراج HTML أو PHP آخر.

يرجى مراجعة هذه التعديلات وتطبيقها على الكود الخاص بك. قد تكون هذه التحسينات مفيدة في حل مشكلتك.

مقالات ذات صلة

زر الذهاب إلى الأعلى

المحتوى محمي من النسخ !!