Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

دمج المصادقة الثنائية مع CodeIgniter

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by Saadkhaled (you can also view the original English article)

من خلال السلسلة الأخيرة من عمليات الخرق البارزة في شركة Sony وغيرها من الشركات ، حان الوقت لإلقاء نظرة ثانية على أمان موقعك على الويب. المصادقة الثنائية هي خطوة في الاتجاه الصحيح لتأمين موقع الويب الخاص بك من المهاجمين. في هذا البرنامج التعليمي ، سنلقي نظرة على تطبيق هذا في تطبيق CodeIgniter.


ما هي المصادقة الثنائية؟

تتطلب المصادقة الثنائية للمستخدمين استخدام شيء يعرفونه ، مثل اسم المستخدم وكلمة المرور ، وشيء لديهم ، مثل الهاتف ، لتسجيل الدخول.

ومؤخرًا ، بدأت شركات مثل Google و Facebook تطرح مصادقة ثنائية لمستخدميها. تستخدم خدمات أخرى مثلMailChimp نماذج بديلة من المصادقة الثنائية للمساعدة في منع المهاجمين. ولكن لا يزال ، على وجه التحديد هو المصادقة الثنائية؟

المصادقة الثنائية هي طريقة لإثبات هويتك بناءً على اسم المستخدم وكلمة المرور بالإضافة إلى جهاز فعلي يمكنك حمله معك.

Duo supports push notifications
يدعم تطبيق الهاتف المتحرك Duo دفع الإخطارات للمصادقة!

هذا يجعل الأمر أكثر صعوبة على المحتالين لسرقة هويتك ، لأنهم سيحتاجون إلى الوصول إلى هاتفك أو رمز الجهاز - وليس فقط بيانات اعتماد تسجيل الدخول الخاصة بك.

محظوظ بالنسبة لك ، يوفر Duo Security خدمة مجانية ثنائية العامل مثالية لأي شخص يبحث عن حماية موقعه على الويب.

ليس Duo مجانيًا فحسب ، ولكنه مليء بالميزات . تسمح لك بالمصادقة بعدة طرق ، بما في ذلك:

  • المصادقة الهاتفية
  • الرموز القائمة على الرسائل القصيرة
  • التطبيق المحمول رمز مميز
  • المصادقة القائمة على الدفع
  • الرموز المميزة للأجهزة المتاحة للشراء

الخطوة 1: الإعداد

الإعداد CodeIgniter

إذا لم تكن قد عملت مع CodeIgniter من قبل ، فإنني أوصيك بشدة بالاطلاع على سلسلةCodeIgniter From Scratch أولاً.

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

يرجى التحقق من أن التهيئة / autoload.php الخاص بك يحتوي على المساعدة التالية التي يتم تحميلها.

انشئ حساب

توجه إلى Duo Security ، واشترك في حساب.

وهي توفر خطة مجانية لمشاريع مفتوحة المصدر ، وللمواقع التي تضم أقل من 10 مستخدمين Duo (مستخدم Duo هو الشخص الذي سيستخدم المصادقة الثنائية لتسجيل الدخول).

خلق التكامل

بعد التسجيل ، يجب تسجيل الدخول إلى Duo وإنشاء تكامل. بمجرد تسجيل الدخول ، انقر فوق عمليات الدمج الموجودة على اللوحة الجانبية لسحب صفحة التكامل. من هناك ، انقر فوق الزر "تكامل جديد".

تأكد من أن التكامل الذي تقوم بإنشائه هو تكامل Web SDK. سيسمح لك ذلك باستخدام واجهة برمجة تطبيقات PHP مع CodeIgniter.

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

قم بتنزيل Web SDK

بالإضافة إلى إعداد التكامل ، ستحتاج إلى تنزيل Web SDK.

هناك نوعان من قطعة من SDK التي سنحتاج: A ملف PHP (duo_web.php) و ملف جافا سكريبت . يرجى ملاحظة أن جافا سكريبت لديه تبعية jQuery ويأتي جافا سكريبت المجمعة مع jQuery.

سنستخدم جافا سكريبت المجمعة ، ولكن نلاحظ أنه إذا لم تكن كذلك ، فيجب تحميل jQuery قبل جافا سكريبت المقدم من Duo. لمزيد من المعلومات حول Web SDK وكيفية عمله ، قم بعرض الوثائق على http://www.duosecurity.com/docs/duoweb


الخطوة 2: تعديلات للأمن

بعد الانتهاء من المصادقة السهلة باستخدام البرنامج التعليمي CodeIgniter ، يجب أن يكون لديك نظام تسجيل دخول أساسي في مكانه.

تجزئة أفضل

كخطوة أولى ، سنضيف دالة تجزئة قوية إلى قاعدة البيانات. Openwall يحتوي على مكتبة تجزئة PHP لطيفة التي تنفذ bcrypt . أحدث إصدار من phpass هو 0.3 في وقت هذه المقالة.

المضي قدما وتنزيل phpass من موقعة على الإنترنت:http://openwall.com/phpass/ . بعد تنزيل المجلد وإلغاء تشفيره ، ستحتاج إلى وضعه في مجلد المكتبات.

سنحتاج الآن إلى إنشاء ملف مكتبة خاص بنا كواجهة للتواصل. قم بإنشاء ملف مكتبة جديد باسم password.php. سيكون لمكتبتنا وظيفتين:

  • وظيفة هاش لإعادة صياغة كلمات المرور القديمة
  • .دالة check_password لمقارنة عمليات التجزئة باستخدام كلمات مرور نص عادي.

و require_once () بيان يضمن أننا سوف تكون قادرة على استخدامPasswordHash الدرجة من phpass.

يأخذ PasswordHash وسيطتين في منشئه:

  • رقم يشير إلى قوة التجزئة
  • منطقية حول ما إذا كان يجب أن تكون كلمات المرور محمولة أم لا.

في هذه الحالة ، سنجعل كلمات مرورنا محمولة.

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

ملاحظة: على الرغم من أننا ننفذ وظيفة تجزئة أقوى ، فلا يزال يتعين عليك مطالبة المستخدمين بالحصول على كلمة مرور قوية .

تغيير نموذج المشرف

في السابق ، كنا نختار المستخدم عن طريق عنوان البريد الإلكتروني وكلمة المرور المجزأة.نحن الآن بصدد سحب المستخدم من قاعدة البيانات استنادًا إلى عنوان البريد الإلكتروني. هذا يعني أن علينا التحقق من كلمة المرور قبل أن نتمكن من إرجاع المستخدم.

بعد قيامنا بسحب المستخدم من قاعدة البيانات ، سنقوم بتحميل مكتبة كلمات المرور التي أنشأناها للتو والتحقق من تطابق كلمة المرور المدخلة مع كلمة المرور المجزأة.

في حالة تطابق كلمتين من كلمات المرور ، سنستمر في إعادة المستخدم ، وإلا ، فإننا نرجعكاذبة .

تأكد من استخدام مكتبة كلمات المرور لتضمين كلمة مرور جديدة لنفسك. كلمات المرور في قاعدة البيانات الخاصة بك ستكون غير صالحة الآن!

تغيير جدول المستخدمين

سنقوم بإضافة حقل إذن أساسي إلى قاعدة البيانات. سيحدد هذا الإذن ما إذا كان المستخدم سيسجل الدخول باستخدام مصادقة ثنائية.

نحتاج إلى إضافة عمود إلى جدول المستخدمين لأذونات العامل الثنائي. يمكنك القيام بذلك عن طريق phpMyAdmin ، أو عن طريق تشغيل SQL التالي.

قيمة 1 في عمود الإذن ستجعل المستخدم يستخدم المصادقة الثنائية.

سيضيف SQL عمودًا منطقيًا إلى جدول المستخدمين. سنستخدم هذا لتطلب من المستخدمين استخدام المصادقة الثنائية أو تجاوزها.

سيضيف SQL عمودًا منطقيًا إلى جدول المستخدمين. سنستخدم هذا لتطلب من المستخدمين استخدام المصادقة الثنائية أو تجاوزها.

إذا تم تعيين هذا العمود على false (0) ، فسيتمكن المستخدم من تجاوز المصادقة الثنائية. هذا مثالي للمستخدمين الذين لا يحتاجون إلى نفس مستوى الأمان كمسؤول.


الخطوة 3: استخدام إعداد الأذونات

سنحتاج إلى طريقة لتجاوز المصادقة الثانوية ، بالإضافة إلى طريقة لإدخال خطوة مصادقة ثانوية إلى عملية تسجيل الدخول.

تجاوز المصادقة الثانوية

أولاً ، سنحتاج إلى طريقة لتجاوز المصادقة الثانوية. هذا يعني أننا سنحتاج إلى فحص المستخدم في وحدة تحكم المشرف.

يقوم هذا بالتحقق لمعرفة ما إذا كان يجب تسجيل دخول المستخدم من خلال نظام العامل الثنائي.

إذا كان يجب على المستخدم استخدام المصادقة الثنائية ، فنحن نريده أن ينتقل إلى صفحة المصادقة الثانوية دون تسجيل الدخول.

بدلاً من إعادة توجيه المستخدم ، يمكننا استدعاء الدالة _second_auth () وجعل ذلك يُحمّل الصفحة. و" عودة يتجنب" بيان تحميل نموذج تسجيل الدخول.

لقد أنشأنا متغيّرًا جديدًا للجلسة - والذي سنستخدمه للتحقق من تسجيل دخول المستخدم. هذا يعني أننا بحاجة إلى إجراء بعض التغييرات على عمليات إعادة التوجيه.

إصلاح عمليات إعادة التوجيه

هناك نوعان من عمليات إعادة التوجيه التي يلزم تغييرها: الأولى في وظيفة الفهرس لوحدة تحكم المشرف.

والآخر هو في وحدة تحكم الترحيب . نحن بحاجة للتأكد من أن المستخدم لم يقم بتسجيل الدخول قبل إعادة التوجيه.

إدخال المصادقة الثانوية

الآن نحن بحاجة إلى التعامل مع المصادقة الثانوية.

في الدالة admin / index ، نسمي _second_auth () ، لذلك دعنا نكتب دالة أساسية.


الخطوة 4: بناء العرض

تعالج أنظمة التوثيق التقليدية عمليات تسجيل الدخول كعملية خطوة واحدة.

User enters username and password then is logged in

يعطينا Duo بعضًا من جافا سكريبت و HTML لحقن بين الخطوتين. هذا يعني أننا سنحتاج إلى إنشاء ملف شخصي بالرمز المطلوب.

User enters username and password then is prompted for phone verification then is logged in

لنقم بإنشاء عرض جديد ، يُسمى second_auth.php في مجلد طرق العرض .سنحتاج إلى إدراج iframe و JavaScript المقدم من Duo حتى ينجح.

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

في الإعداد النموذجي ، ستحتفظ بجميع JavaScript في مجلد مورد. هنا ، وضعنا مجلدموارد في جذر موقعنا ، مع مجلد فرعي " js " يحتوي على ملف جافا سكريبت Web SDK.

سوف يبدو لدينا src :

نحتاج أيضًا إلى إضافة هذا الجزء الثاني من JavaScript.

سننشئ هذه البيانات من وحدة التحكم قريبًا.

إدخال نموذج

إذا اتبعت البرنامج التعليمي السابق ، يجب أن تكون قد قمت بتكوين CodeIgniter للحماية من CSRF .

نظرًا لأن جافا سكريبت ستقوم بنشر البيانات إلى وحدة التحكم الخاصة بنا ، سيبحث CodeIgniter عن رمز CSRF المميز. إذا لم يكن لدينا هذا الرمز ، فسنحصل على خطأ.

ستقدم جافا سكريبت التي نستخدمها نموذجًا بمعرف " duo_form ". كل ما يتعين علينا القيام به هو خلقه.

باستخدام فئة النموذج ، سيقوم CodeIgniter تلقائيًا بحقن الرمز المميز. عند نشر النموذج ، سيجد CodeIgniter الرمز المميز ودعنا نتواصل.


الخطوة 5: إعداد البيانات

مرة أخرى في وحدة تحكم المشرف ، نحن بحاجة إلى توليد بعض البيانات في وظيفة_second_auth () لدينا .

المضيف هو عنوان URL API الذي تم تزويدك به عند الاشتراك في Duo. يجب أن يبدو عنوان URL هذا مثل api-xxxxxxxx.duosecurity.com (حيث يمثل "xxxxxxxx" سلسلة فريدة مرتبطة بحسابك في Duo).

تذكر استبدال المضيف بعنوان URL الخاص بك. عنوان URL أعلاه لن يعمل.

إجراء المشاركة هو عنوان URL الذي سيتعامل مع الاستجابة بمجرد محاولة المستخدم المصادقة باستخدام Duo.

سننشئ وظيفة أخرى في وحدة تحكم المشرف للتعامل مع عملية إعادة التحميل. في الوقت الحالي ، سنقوم بتسمية الدالة process_second_auth () .

تحميل PHP Web SDK

تأكد من إعادة تسمية "duo_web.php" إلى "duo.php" لتجنب أخطاء CodeIgniter.

إذا لم تقم بتنزيل أحدث نسخة من duo_web.php ، فيمكنك الحصول عليها من صفحة Duo Web SDK GitHub .

لأن Web SDK يأتي كفئة PHP ، يمكننا إعادة تسميته إلى " duo.php " ووضعه في مجلد "application / libraries" الخاص بنا.

لأن Web SDK يأتي كفئة PHP ، يمكننا إعادة تسميته إلى " duo.php " ووضعه في مجلد "application / libraries" الخاص بنا.

توليد طلب موقعة

لفهم كيفية إنشاء sig_request ، يجب أن تفهم ما نقوم بتوليده .

يجب ألا يقل طول متغير $ akey عن 40 حرفًا ، وإلا فسوف تعرض مكتبة Duo خطأً!

يقوم Duo Web SDK بإنشاء اثنين من الرموز المميزة ، واحدة مع المفتاح السري يعطيك ، آخر مع مفتاح التطبيق الذي تقوم به.

sig_request هو مزيج من الرمزين المميزين .

من خلال إنشاء مفتاح التطبيق الخاص بك ، سيكون لديك طبقة ثانية من الأمان. سيحتاج المهاجم إلى كلٍّ من المفتاح السري من Duo ومفتاح التطبيق الشخصي لتزوير رمز مميز.

الآن سنقوم بإنشاء "sig_request". سيزودك Duo بمفتاح التكامل والمفتاح السري عند إنشاء دمج.

تأكد من استبدال النص أدناه بمفتاح التكامل والمفتاح السري المعطى لك. تحتاج إلى تكوين مفتاح سري خاص بك. يجب أن يكون طوله 40 حرفًا على الأقل ، ويجب أن يكون عشوائيًا قدر الإمكان.

سوف تقوم علامة signo () لـ Duo بتوليد الرموز المميزة وإعادتها كسلسلة لتمريرها إلى sig_request .

نحن الآن بحاجة إلى تحميل البيانات في طريقة العرض التي أنشأناها في وقت سابق.

إذا حاولت تسجيل الدخول الآن ، يجب أن تشاهد هذه الصفحة:

Duo Enrollment Page

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

إذا كنت لا ترى أي شيء على الإطلاق ، فاعرض مصدر الصفحة لرسائل الخطأ. سيتم عرض أي أخطاء في البيانات في العلامة <script> .

إذا كان الأمر ينص على "تم رفض الوصول" ، فتأكد من إدخال التكامل ومفتاح سري من موقع Duo Security على الويب.


الخطوة 6: معالجة المصادقة الثانوية

لقد أنشأنا عمل آخر أن يكون لدينا المشرف / process_second_auth ، لذلك نحن بحاجة إلى إنشاء process_second_auth () وظيفة.

بما أن هذه الوظيفة ستحتوي على عنوان URL الخاص بها ، فإننا نحتاج إلى إعادة توجيه المستخدمين المسجلين.

يتعين علينا تحميل مكتبة Duo مرة أخرى للتحقق من صحة البيانات.

ونحن سوف تكون بحاجة نفس $ ikey، skey $ و $ akey من_second_auth () وظيفة للتحقق من صحة البيانات التي تم نشرها.

تقوم JavaScript بإرجاع sig_response من خوادم Duo.

بمجرد سحبنا sig_response من البيانات المنشورة ، سنقوم بتشغيلها من خلالوظيفة verifyResponse () . سيؤدي هذا إلى إرجاع NULL إذا لم تتطابق الرموز المميزة ، أو اسم مستخدم إذا كانت صالحة.

أخيرًا ، سنقوم بالتحقق من أنه قد تم إرجاع اسم مستخدم ، والانتهاء من تسجيل الدخول به عن طريق تعيين قيمة $ _SESSION ['login_in'] على true.

يجب أن تبدو الوظيفة معًا كما يلي:

الآن يجب أن تكون قادرًا على تسجيل الدخول باستخدام مصادقة ثنائية ، والمضي قدمًا وتجربتها!


استنتاج

نأمل أن تقوم بإعداد نظام المصادقة الثنائية الخاصة بك ل CodeIgniter!

أتستطيع أن تفعل شيئا غير هذا؟ هناك الكثير للقيام به فيما يتعلق بالأمن ، ولكن أكبر تحسن هو تتبع إجراءات المستخدم.

إن نظام الأمان الجيد ليس آمنًا فحسب ، بل سيساعدك أيضًا على تحديد مصدر الثغرة الأمنية.يجب عليك تتبع محاولات تسجيل الدخول ، وغيرها من الإجراءات لجعل التعرف على المهاجمين أسهل.

شكرا للقراءة! إذا كنت تواجه مشكلة ، فاترك رسالة في التعليقات.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.