"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ نظام تسجيل الدخول للصفحة للأعضاء فقط بشكل آمن في PHP؟

كيفية تنفيذ نظام تسجيل الدخول للصفحة للأعضاء فقط بشكل آمن في PHP؟

تم النشر بتاريخ 2024-11-17
تصفح:410

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: صفحات آمنة للأعضاء فقط مع نظام تسجيل الدخول

تحديات الكود المقدم

يواجه كود PHP المقدم العديد من المشكلات التي تعيق عمله الوظيفة:

  1. استرجاع نتائج الاستعلام : بدلاً من استخدام $data1 = $conn->query($sql1);، الطريقة الصحيحة هي استخدام $data = mysqli_fetch_array($conn->query($sql1)); أو $data = $conn->query($sql1)->fetch_array(); لجلب نتائج الاستعلام.
  2. اتصال قاعدة البيانات وتنفيذها: يجب إنشاء الاتصال بقاعدة البيانات باستخدام $total = $data = 0; قبل تنفيذ أي استعلامات.
  3. بناء جملة MySQLi : يجب أن يستخدم الاستعلام الخاص بإدراج الرمز المميز علامات الرجوع () حول أسماء الجدول والأعمدة (INSERT INTO tokens (tk, gauth) VALUES (?,? )`) بدلاً من علامات الاقتباس المفردة.
  4. مصادقة المستخدم: يجب أن يعود منطق المصادقة نتيجة الاستعلام بدلاً من الاعتماد على القيم المنطقية ($result = $conn->query($sql3)->fetch_array();).
  5. إنشاء الرمز المميز: الرمز المميز الموجود طريقة الإنشاء غير آمنة لأنها تستخدم opensl_random_pseudo_bytes(). بدلاً من ذلك، يجب أن تستخدم التعليمات البرمجية منشئ أرقام عشوائية آمن تشفيرًا (CSPRNG) مثل Rand_bytes().

الحل المقترح

  1. تبسيط عمليات قاعدة البيانات: استخدم استعلامًا واحدًا لاسترداد معلومات المستخدم والتحقق من بيانات الاعتماد.
  2. استخدم البيانات المعدة : ربط المعلمات لمنع ثغرات حقن SQL.
  3. إنشاء الرموز بشكل آمن : استخدم Random_bytes () أو وظيفة مماثلة لإنشاء رمز مميز آمن.
  4. تخزين بيانات المصادقة في الجلسة : احفظ رمز المصادقة في متغير الجلسة بدلاً من ملف تعريف الارتباط.
  5. التحقق من الصحة الرموز : قم بإجراء استعلام قاعدة بيانات مقابل جدول الرموز المميزة للتحقق من صحة الرمز المميز المقدم.
الكود المحسن

يعالج الكود المنقح التالي المشكلات المحددة ويوفر عضوًا أكثر أمانًا -نظام تسجيل الدخول بالصفحة فقط:

connect_error) { يموت("فشل الاتصال:" . $conn->connect_error); } // إعداد بيان لمصادقة المستخدم $sql_auth = $conn->prepare("SELECT * من المستخدمين أين اسم المستخدم =؟ وكلمة المرور = ؟"); $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']); $sql_auth->تنفيذ(); $result_auth = $sql_auth->get_result(); // مصادقة المستخدم إذا ($result_auth->num_rows > 0) { $user = $result_auth->fetch_assoc(); $صحيح = صحيح؛ } آخر { $صحيح = خطأ؛ } // إنشاء رمز مميز إذا (صحيح === صحيح) { $hex = bin2hex(random_bytes(3)); $_SESSION['auth'] = $hex; $_SESSION['logstat'] = TRUE; } // إغلاق الاتصال $conn->إغلاق(); ?>
            
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3