كيف يمكنك تنفيذ المصادقة المستندة إلى النموذج بدون قاعدة بيانات داعمة؟

StackOverflow https://stackoverflow.com/questions/17376

سؤال

لدي برنامج نصي PHP يعمل كبرنامج CGI وHTTP Authenticate يؤكل الرأس ويبصق.لذلك أود تنفيذ نوع من المصادقة المستندة إلى النموذج.كقيد إضافي، لا توجد قاعدة بيانات لذلك لا يمكن تخزين أي بيانات للجلسة.

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

فكيف يمكنك تنفيذ هذا؟

بسكويت؟

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

هل كانت مفيدة؟

المحلول

بعض الطرق التي يمكنك من خلالها القيام بذلك.

  1. htaccess - اجعل خادم الويب الخاص بك يتعامل مع تأمين الصفحات المعنية (وليس على أساس نموذج CGI بالضبط).
  2. استخدم ملفات تعريف الارتباط ونوعًا من خوارزميات التجزئة (MD5 جيد بما يكفي) لتخزين كلمات المرور في ملف ثابت حيث يكون كل سطر في الملف هو اسم المستخدم:passwordhash.تاكد من ملح تجزئاتك لمزيد من الأمان مقابل جداول قوس قزح.(هذه الطريقة ساذجة بعض الشيء ...يكون جداً كن حذرًا مع الأمان إذا ذهبت إلى هذا الطريق)
  3. استخدام شيء مثل com.sqlite قاعدة البيانات فقط للتعامل مع المصادقة.Sqlite صغير الحجم وبسيط بدرجة كافية بحيث يلبي احتياجاتك حتى لو كنت لا تريد واجهة خلفية كبيرة الحجم.

من الناحية النظرية، يمكنك أيضًا تخزين بيانات الجلسة في ملف ثابت، حتى لو لم يكن لديك قاعدة بيانات.

نصائح أخرى

إذا كنت تستخدم Authenticate حاليًا، فقد يكون لديك بالفعل htpasswd ملف.إذا كنت ترغب في الاستمرار في استخدام هذا الملف، ولكنك تقوم بالتبديل إلى استخدام المصادقة المستندة إلى النموذج بدلاً من استخدام رأس المصادقة، فيمكنك استخدام برنامج PHP النصي لاستخدام نفس ملف htpasswd واستخدام الجلسات للحفاظ على حالة المصادقة.

يكشف بحث Google السريع عن php htpasswd هذه الصفحة باستخدام وظيفة PHP للتحقق من بيانات الاعتماد مقابل htpasswd.يمكنك دمجها (على افتراض أن لديك جلسات مضبوطة على التشغيل التلقائي) مع بعض التعليمات البرمجية مثل هذا:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

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

هل تحتاج حقًا إلى رؤية رأس التفويض إذا كان خادم الويب يعتني بالتحكم في الوصول نيابةً عنك؟

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

حظ سعيد، :)

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top