يرجى ملاحظة أن هذا المشروع لم يعد يتم صيانته بشكل نشط.
بدأ هذا المشروع كمهمة مدرسية بسيطة لبعض دورات PHP التي كنت أحضرها. ثم كنت بحاجة إلى هذا النوع من النظام لبعض مواقع الويب التي كنت أقوم بإنشائها وقررت البدء في التوسع. كلمة تحذير: هذا المشروع سيكون محل رأي كبير، مما يعني أنني سأضيف فقط الميزات التي أجدها بنفسي مفيدة أو مثيرة للاهتمام بدرجة كافية لتطويرها.
password_hash()
لتجزئة كلمات المرور وملحها. يتم حفظ أسماء المستخدمين كنص عادي.PASSWORD_DEFAULT
والذي يستخدم BCRYPT في وقت الكتابة.AKA "لماذا يوجد الكثير من الملفات؟"
لوحة الإدارة ستكون هنا كما هو الحال مع العديد من تطبيقات الويب الأخرى (مثل WordPress)، يمكن الوصول إلى لوحة الإدارة بسهولة عن طريق كتابة [host]/admin .
يتضمن هذا المجلد ملفين يتم استخدامهما لتعيين بعض خيارات التكوين. مزيد من المعلومات أدناه.
فقط بعض الأشياء الجيدة لـ CSS لواجهة المستخدم.
المثبت التلقائي موجود هنا.
يحتوي هذا المجلد على كافة ملفات .js اللازمة لكي تعمل واجهة المستخدم.
يتضمن هذا المجلد العمود الفقري للنظام. يحتوي على ملفات .php للاتصال بقاعدة البيانات، وتسجيل الدخول والخروج، وتسجيل/إنشاء حساب جديد وتعديل الحسابات الموجودة. هناك أيضًا scripts.js الذي يحتوي على بعض ميزات JavaScript العامة لواجهة المستخدم. تحتاج إلى إدراج معلومات قاعدة البيانات الخاصة بك في credentials.php، وراجع قسم الإعداد أدناه للحصول على المساعدة.
يجب عليك قراءة هذا قبل استخدام هذا. إنها مجرد رخصة عادية من معهد ماساتشوستس للتكنولوجيا.
هذا الملف.
هذه هي صفحة إدارة الحساب. يمكن للمستخدمين تغيير اسم المستخدم وكلمة المرور الخاصة بهم هنا.
هذا الملف موجود هنا فقط للعرض التوضيحي. لا يمكن للمستخدمين الوصول إلى هذه الصفحة إلا إذا قاموا بتسجيل الدخول. وإلا فسيتم إعادة توجيههم إلى صفحة تسجيل الدخول.
رأيي في إنشاء نموذج تسجيل دخول بسيط باستخدام Bootstrap. لا تتردد في تعديله لتناسب احتياجاتك.
رأيي في إنشاء نموذج تسجيل بسيط باستخدام Bootstrap. لا تتردد في تعديله لتناسب احتياجاتك.
يتم استخدام هذا بواسطة المثبت التلقائي لإزالة نفسه بعد اكتمال التثبيت.
هذه هي قائمة الكلمات الإنجليزية الأكثر شيوعا. يتم استخدامه من قبل مقترح اسم المستخدم. يمكنك استبدال القائمة بملف .txt الخاص بك. يجب أن يتبع كل كلمة في القائمة فاصل أسطر.
يرجى ملاحظة أن خيارات التكوين عرضة للتغيير. التحقق مرة أخرى في كثير من الأحيان.
إذا قمت بفحص المجلد /config، ستلاحظ وجود ملفين مختلفين هناك. ماذا يعطي؟ ملف التكوين الرئيسي هو config.php . ويتضمن الإعدادات التي يتم فرضها على مستوى الخادم. يجب أن تقوم بتحرير هذا الملف بشكل أساسي.
إذا كنت تستخدم أيضًا واجهة المستخدم الأمامية التي أقدمها، فيمكنك/يجب عليك أيضًا تحرير config.js حيث يمكنك إدارة كيفية ظهور الأشياء للمستخدم العادي. يرجى تذكر أن هذه الإعدادات خاصة بالعميل فقط ولا يتم فرضها بأي شكل من الأشكال حتى يتمكن المستخدمون من تحريرها.
اسم الخيار | وصف | القيمة الافتراضية | القيم المدعومة |
---|---|---|---|
$disableUserSelfRegistration | منع المستخدمين من التسجيل | خطأ شنيع | منطقية |
$usernameMinLength | أقصر اسم مستخدم مسموح به | 3 | 1-> |
$usernameMaxLength | أطول اسم مستخدم مسموح به | 30 | 1-> |
$passwordMinLength | الحد الأدنى لطول كلمات المرور | 8 | 1-> |
$usernameRegExp | يجب أن تتطابق جميع أسماء المستخدمين مع هذا التعبير العادي | أي regExp | |
$passwordRegExp | يجب أن تتطابق جميع كلمات المرور مع هذا التعبير العادي | أي regExp | |
$newAccountAccessLevel | مفيد لإنشاء حساب المسؤول الأول الخاص بك | "مستخدم" | "المستخدم"، "المسؤول" |
$debugMode | يسمح لك بتعطيل اتصال dabase (لتصحيح الأخطاء فقط) | "لا" | "لا" |
$debugAdminUsername | يسمح لك بتسجيل الدخول أثناء وجودك في وضع التصحيح | "مسؤل" | أي سلسلة |
$debugAdminPassword | يسمح لك بتسجيل الدخول أثناء وجودك في وضع التصحيح | "" | أي سلسلة |
$debugSkipInstall | هذا لأغراض التصحيح فقط | خطأ شنيع | خطأ شنيع |
$مهلة | وقت عدم النشاط (بالثواني) المطلوب لتسجيل خروج المستخدم | 900 | أي عدد صحيح |
$adminPanelTimeout | وقت عدم النشاط المطلوب لتسجيل خروج المستخدم من لوحة الإدارة | 450 | أي عدد صحيح |
$errorMessages | عرض المزيد من رسائل الخطأ المطولة. قد يؤدي ذلك إلى تسرب معلومات حساسة! | تقصير | "افتراضي"، "مطول" |
$allowUsernameChange | يجب أن يكون المستخدم قادرًا على تغيير اسم المستخدم الخاص به | حقيقي | منطقية |
$forceHTTPS | يعيد توجيه كافة الاتصالات غير HTTPS إلى HTTPS ويرسل HSTS | خطأ شنيع | منطقية |
في عام 2019، يعتبر عدم استخدام HTTPS خطرًا أمنيًا كبيرًا عند التعامل مع أي نوع من المعلومات الحساسة (مثل كلمات المرور). ولهذا السبب يوصى بشدة باستخدام حلول الاستضافة التي تدعمها فقط وتغيير هذا الخيار إلى صحيح. في الوقت الحاضر، يمكنك أيضًا الحصول على شهادة SSL مجانًا تمامًا من Let's Encrypt، لذلك لا يوجد سبب لعدم استخدامها. ومع ذلك، في بعض البيئات (التي تم تكوينها بشكل سيئ) لم يتم تعريف SERVER["HTTPS"] superglobal حتى عند استخدام HTTPS بالفعل. وينتج عن ذلك حلقة لا نهاية لها من إعادة التوجيه. وأنا نفسي تعلمت ذلك بالطريقة الصعبة.
اسم الخيار | وصف | القيمة الافتراضية | القيم المدعومة |
---|---|---|---|
DisableUserSelfRegistration | تعطيل أي عناصر واجهة المستخدم المتعلقة بالتسجيل | خطأ شنيع | صحيح، كاذب |
اسم المستخدمMinLength | أقصر اسم مستخدم تقبله واجهة المستخدم | 3 | 1-> |
اسم المستخدمMaxLength | أطول اسم مستخدم تقبله واجهة المستخدم | 30 | 1-> |
passMinLength | أقصر كلمة مرور تقبلها واجهة المستخدم | 8 | 1-> |
usernameRules | تظهر هذه السلسلة إذا كان اسم المستخدم لا يتطابق مع regExp | أي سلسلة | |
passRules | تظهر هذه السلسلة إذا كانت كلمة المرور لا تتطابق مع regExp | أي سلسلة | |
تمكين اقتراحات اسم المستخدم | يسمح لك بتعطيل أو تمكين اقتراحات اسم المستخدم | حقيقي | منطقية |
allowUsernameChange | هل يجب أن يتمكن المستخدم من تغيير اسم المستخدم الخاص به (واجهة المستخدم فقط) | حقيقي | منطقية |
EnableLoginMessage | عرض أي رسالة على صفحة تسجيل الدخول | خطأ شنيع | منطقية |
رسالة تسجيل الدخول | حدد الرسالة التي سيتم إظهارها عندما يكون الخيار EnableLoginMessage صحيحًا | "" | أي سلسلة |
كما ذكرنا سابقًا، ستحتاج إلى قاعدة بيانات MySQL. لا تتطلب قاعدة البيانات الكثير من المساحة (ما لم يكن لديك الكثير من المستخدمين) وأي إصدار حديث إلى حد ما من MySQl يجب أن يعمل. يمكنك إعداد قاعدة البيانات الخاصة بك وإنشاء حساب المسؤول يدويًا، أو يمكنك استخدام برنامج التثبيت التلقائي الخاص بي.
أثناء الخطوة الأولى من التثبيت، يحتاج المثبت إلى كتابة ملف على محرك الأقراص المضيف الخاص بك. إذا لم يكن لديك الأذونات المناسبة لذلك، فيجب عليك إجراء التثبيت يدويًا. انظر التعليمات أدناه.
users
الجدول بخمسة أعمدة: username
password
و accessLevel
و lastLogin
و rememberMeToken
. استخدم نوع بيانات سلسلة مثل CHAR. أنا شخصيا أحب استخدام VARCHAR. بالنسبة lastLogin
أوصي بـ INT(11). أود أيضًا إضافة حقل معرف متزايد تلقائيًا كمفتاح أساسي ولكن هذا ليس مطلوبًا بشكل صارم.إذا كنت تستخدم VARCHAR أو أي نوع بيانات آخر بأقصى طول متفاوت للسلسلة، فسيكون الجدول أدناه مفيدًا.
مجال | الطول المطلوب (الحد الأدنى) |
---|---|
اسم المستخدم | مثل $usernameMaxLength في config.php |
كلمة المرور | أوصي باستخدام 255 لتكون آمنًا (حيث قد تتغير طريقة التشفير الافتراضية لـ PHP) |
مستوى الوصول | 5 |
lastLogin | 11 |
RememberMeToken | 255 |
لا تقلق، شيء مثل هذا يجب أن يغطيك:
CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR ( 64 ) NOT NULL UNIQUE,
password VARCHAR ( 255 ) NOT NULL ,
accessLevel VARCHAR ( 10 ) NOT NULL ,
lastLogin INT ( 11 ),
rememberMeToken VARCHAR ( 255 )
);
بعد إعداد قاعدة البيانات، ستحتاج إلى إنشاء حساب المسؤول الأول الخاص بك. هناك طريقتان للقيام بذلك:
admin
وكلمة المرور التي تم إنشاؤها عشوائيًا. (إذا اتبعت نموذج SQL الخاص بي أعلاه وقمت بتعيين قيد فريد على حقل اسم المستخدم، فلن يتم إنشاء الحساب إذا كان موجودًا بالفعل. لن تحصل على رسالة خطأ) بعد إنشاء حساب المسؤول، يجب عليك إزالة (أو إعادة تسمية) المجلد /install. وأخيرًا، قم بتسجيل الدخول إلى الحساب الذي تم إنشاؤه حديثًا وقم بتغيير كلمة المرور باستخدام صفحة إدارة الحساب.أو
$newAccountAccessLevel
مؤقتًا في config/config.php إلى "admin" ثم إنشاء حساب جديد باستخدام نموذج التسجيل العادي. تحتاج إلى إزالة المجلد /install لتتمكن من الوصول إلى صفحة تسجيل الدخول. تذكر تغيير القيمة مرة أخرى إلى "المستخدم" بعد ذلك.مهم! أذكرك مرة أخرى أنه يجب عليك حذف المجلد /install قبل استخدام هذا في بيئة الإنتاج المباشر. وإلا يمكن لأي شخص رؤية بيانات اعتماد قاعدة البيانات الخاصة بك!
بعد الإعداد، يمكنك إنشاء حسابات جديدة (إدارية أو عادية) باستخدام لوحة الإدارة.
هذا يعني أن المثبت لاحظ أن الدالة random_bytes(int)
غير موجودة أو تعمل بشكل صحيح. إذا كنت تستخدم إصدار PHP أقدم من 7.0، فيجب عليك استخدام مكتبة تابعة لجهة خارجية تنفذ هذه الوظيفة. بالنسبة لـ PHP 5.x أوصي بهذا.
الافتراضي لـ MySQL هو 3306.
يحدث هذا عندما يفشل المعالج في إزالة نفسه. يحدث ذلك عادةً بسبب بعض الأذونات المقيدة على المضيف. قم بإصلاح المشكلة عن طريق إزالة المجلد /install يدويًا.
تحقق من نصائح استكشاف الأخطاء وإصلاحها في الأسئلة الشائعة العامة أدناه.
لوحة الإدارة في مرحلة مبكرة جدًا من التطوير. قد تنكسر أشياء كثيرة.
المزيد ليتم إضافتها في المستقبل.
/مسؤل
اقرأ ملف config.php بعناية أكبر.
وهذا يعني أن PDOException
حدث أثناء محاولة الاتصال بقاعدة البيانات. يمكنك تشغيل المزيد من رسائل الخطأ المطولة في /config/config.php . الأسباب الأكثر شيوعًا هي:
PDO_MYSQL
غير متوفر أو تم تكوينه بشكل صحيح.PDO_MYSQL
. لا، لم يحدث ذلك، لقد مضى وقت طويل على هذا النحو، أعلم. أخطط للوصول إليه قريبًا™. التحديث: إنه يعمل الآن. يرجى ملاحظة أنه يتذكر تسجيل الدخول لمدة 30 يومًا فقط (لأسباب أمنية).
نعم، أعلم أن تنفيذ شيء كهذا يفتح دائمًا ثغرات أمنية جديدة. ومع ذلك، أنا لا أجبر المستخدمين على استخدامه أو أي شيء. إذا لم يحدد المستخدم مربع الاختيار، فلن يتم إنشاء رمز وصول لذلك لا توجد مخاطر أمنية لهذا المستخدم.
random_bytes()
الآمنة تشفيرًا. يتم حفظ هذا الرمز المميز في قاعدة البيانات ويتم إرسال ملفي تعريف الارتباط إلى المتصفح. قيمة ملف تعريف الارتباط الأول هي اسم المستخدم الخاص بالمستخدم كنص عادي. ملف تعريف الارتباط الثاني هو أكثر أهمية بكثير. قيمتها هي الرمز المميز الذي تم إنشاؤه.المشكلة الرئيسية هي أنه إذا كان "الشخص السيئ" قادرًا بطريقة أو بأخرى على الوصول إلى الرمز المميز للمستخدم، فيمكنه بسهولة تزوير ملف تعريف ارتباط وتسجيل الدخول باسم ذلك المستخدم. هناك طريقتان يستطيع الشخص السيئ الوصول إلى الرمز المميز للمستخدم: عن طريق الحصول عليه بطريقة ما (على سبيل المثال، حقن SQL) من قاعدة البيانات أو عن طريق سرقة ملف تعريف الارتباط و/أو قيمته من المستخدم.
أنا أعتبر ذلك خطرًا أمنيًا لأن بعض الأشخاص يميلون إلى استخدام كلمات مرور بسيطة جدًا أو متشابهة. ومع ذلك، قد أسمح بذلك في الإصدارات المستقبلية عبر خيار التكوين.