انتقل إلى المحتوى

مولّد ملف htpasswd لخادم أباتشي (⁦bcrypt⁩ و⁦APR1-MD5⁩)

أنشئ أسطر ملف ⁦.htpasswd⁩ لخادم أباتشي لحماية مجلد أو موقع تجريبي أو صفحة إدارة بكلمة مرور عبر المصادقة الأساسية. اكتب اسم المستخدم وكلمة المرور، واختر ⁦bcrypt⁩ أو ⁦APR1-MD5⁩، ثم انسخ النتيجة أو نزّلها. ويمكنك أيضًا التحقق من مطابقة كلمة مرور لسطر موجود لديك. تجري التجزئة في متصفحك، فلا تُرسل كلمة المرور إلى هذا الموقع ولا إلى أي مكان آخر.

الإجابة المختصرة

لإنشاء مُدخل في ملف ⁦.htpasswd⁩، اكتب اسم المستخدم وكلمة المرور، وأبقِ ⁦bcrypt⁩ مختارة بمعامل تكلفة 10، واضغط «إنشاء السطر»، ثم الصق السطر ⁦username:$2y$…⁩ في الملف. فخوارزمية ⁦bcrypt⁩ أقوى صيغة تدعمها أداة ⁦htpasswd⁩ في أباتشي، ولا تختر ⁦APR1-MD5⁩ إلا لإصدارات أباتشي القديمة جدًا أو للخوادم التي لا تقرأ ⁦bcrypt⁩.

صيغة التجزئة

تجري التجزئة في متصفحك، ولا يُرفع اسم المستخدم ولا كلمة المرور ولا الأسطر، ولا تُسجَّل ولا تُحفظ.

تظهر هنا أسطر ملف ⁦.htpasswd⁩، وتُنشأ على جهازك.

إعدادات أباتشي التي تستخدم الملف

AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

ضع هذه الأسطر في إعدادات الموقع أو في ملف ⁦.htaccess⁩ داخل المجلد الذي تريد حمايته، واجعل ⁦AuthUserFile⁩ يشير إلى ملف ⁦.htpasswd⁩، ويُفضَّل أن يكون خارج المجلد العام للموقع. وقدّم الموقع دائمًا عبر ⁦HTTPS⁩.

طريقة استخدام أداة مولّد ملف htpasswd

  1. اكتب اسم المستخدم وكلمة المرور، أو اضغط «اقترح واحدة» للحصول على كلمة مرور عشوائية قوية، واحفظها في مكان آمن مثل مدير كلمات المرور.
  2. أبقِ ⁦bcrypt⁩ بمعامل تكلفة 10، أو اختر ⁦APR1-MD5⁩ إن كان خادمك لا يدعم ⁦bcrypt⁩، ثم اضغط «إنشاء السطر». وكرّر ذلك لكل مستخدم.
  3. انسخ الأسطر أو نزّلها، واحفظها باسم ⁦.htpasswd⁩ على الخادم، وأضف إعدادات أباتشي الظاهرة بجانب النتيجة إلى المجلد الذي تريد حمايته.

ما ملف htpasswd

تتحقق المصادقة الأساسية في أباتشي من الزوار بالرجوع إلى ملف نصي بسيط فيه مستخدم واحد في كل سطر، يُكتب بالشكل: اسم المستخدم ثم نقطتان ثم تجزئة كلمة المرور، مثل ⁦admin:$2y$10$…⁩. ولا يخزّن الخادم كلمة المرور نفسها، بل يجزّئ ما يكتبه المستخدم عند الدخول ويقارن النتيجة. ويُسمّى الملف عادةً ⁦.htpasswd⁩، وينبغي أن يكون خارج المجلد العام للموقع حتى لا يستطيع أحد تنزيله. وتقرأ صيغة الملف نفسها خوادم ويب أخرى ولوحات تحكم استضافة كثيرة.

لماذا ⁦bcrypt⁩ هو الخيار الصحيح

إذا تسرّب الملف يومًا فسيحاول المهاجمون تخمين كلمات المرور دون اتصال. وقد صُممت ⁦bcrypt⁩ لتكون بطيئة، وتضيف ملحًا عشوائيًا، ويجعل معامل التكلفة كل تخمين أغلى؛ إذ تضاعف كل درجة منه حجم العمل. فعند التكلفة 10 لا تجرّب بطاقة رسوميات حديثة إلا آلاف التخمينات في الثانية، مقابل مليارات مع التجزئة العادية. وقد قبل أباتشي ⁦bcrypt⁩ منذ الإصدار 2.4.4، ويكتبها الأمر ⁦htpasswd⁩ بالبادئة ⁦$2y$⁩، وهي البادئة التي تستخدمها هذه الأداة أيضًا.

لماذا صيغ ⁦SHA1⁩ و⁦crypt⁩ و⁦MD5⁩ العادية ضعيفة

تخزّن صيغة ⁦{SHA}⁩ تجزئة ⁦SHA-1⁩ لكلمة المرور دون ملح، فتعطي كلمات المرور المتطابقة أسطرًا متطابقة، وتكسر الجداول المحسوبة مسبقًا والأجهزة السريعة كلمات المرور الشائعة في لحظات. أما صيغة ⁦crypt⁩ القديمة فتعتمد على ⁦DES⁩، ولا تنظر إلا إلى أول 8 أحرف، وملحها صغير جدًا. وصيغة ⁦APR1-MD5⁩ أفضل، فلها ملح و1,000 جولة من ⁦MD5⁩، لكن ⁦MD5⁩ سريعة جدًا حتى إن بطاقة رسوميات واحدة تختبر ملايين التخمينات في الثانية. لذلك لا تقدّم هذه الأداة صيغتي ⁦SHA1⁩ و⁦crypt⁩ أصلًا، وتصف ⁦APR1⁩ بأنها خيار احتياطي.

اختيار معامل التكلفة في ⁦bcrypt⁩

تستخدم أداة ⁦htpasswd⁩ في أباتشي التكلفة 5 افتراضيًا، وهي سريعة لكنها ضعيفة بمعايير اليوم، والتكلفة 10 حل وسط معقول. والتكلفة الأعلى تُبطئ كل عملية دخول أيضًا، لأن الخادم يكرر العمل نفسه مع كل طلب يحمل كلمة المرور، والمصادقة الأساسية ترسلها مع كل صفحة وصورة. وفي موقع مزدحم قد تضيف التكلفة 12 أو أكثر حملًا ملحوظًا. اختر أعلى تكلفة يتحملها خادمك براحة، واستخدم كلمة مرور عشوائية طويلة؛ فلا معامل تكلفة ينقذ كلمة مرور مثل ⁦admin123⁩.

أسماء المستخدمين والنص غير الإنجليزي وكلمات المرور الطويلة

لا يجوز أن يحتوي اسم المستخدم على نقطتين، وفواصل الأسطر تقسم الملف، لذا تمنع الأداة الاثنين. وتعمل الأحرف العربية والرموز التعبيرية في الملف بترميز ⁦UTF-8⁩، لكن المتصفحات تختلف في طريقة إرسالها في نافذة الدخول، فالأسماء الإنجليزية البسيطة هي الخيار الآمن. ولا تقرأ ⁦bcrypt⁩ إلا أول 72 بايت من كلمة المرور؛ والحرف العربي يأخذ بايتين والرمز التعبيري أربعة، فتنبّهك الأداة حين يُهمَل آخر كلمة مرور طويلة.

الخصوصية وطريقة التأكد من النتيجة

يجري كل شيء هنا في متصفحك باستخدام ⁦bcryptjs⁩، وهي تطبيق واسع الاستخدام لخوارزمية ⁦bcrypt⁩ بلغة جافاسكربت، مع دالة ⁦MD5⁩ مدمجة في الصفحة. ولا يُرسل شيء مما تكتبه، ولا تسجّل أدوات القياس في الموقع إلا الصيغة والتكلفة اللتين اخترتهما. ويستخدم كل سطر ملحًا عشوائيًا جديدًا، فلن تحصل على السطر نفسه مرتين حتى مع كلمة المرور نفسها. وللتأكد من أن السطر يعمل قبل رفعه، انتقل إلى «التحقق من سطر» واختبر كلمة المرور عليه.

الأسئلة الشائعة

أي صيغة أستخدم في ملف htpasswd: ⁦bcrypt⁩ أم ⁦MD5⁩؟

استخدم ⁦bcrypt⁩ متى كان خادمك يعمل بأباتشي 2.4.4 أو أحدث، وهذا حال كل الخوادم تقريبًا اليوم. ولا تختر ⁦APR1-MD5⁩ إلا لإصدار أباتشي قديم، أو لخادم آخر لا تقرأ مكتبة ⁦crypt⁩ في نظامه تجزئات ⁦$2y$⁩؛ فهي مملّحة لكن كسرها أسرع بكثير من ⁦bcrypt⁩.

لماذا تُعد صيغتا ⁦SHA1⁩ و⁦crypt⁩ ضعيفتين في ملف htpasswd؟

لا ملح في صيغة ⁦{SHA}⁩، وحساب ⁦SHA-1⁩ سريع للغاية، فتسقط التجزئات المسرّبة لكلمات المرور الشائعة فورًا تقريبًا. أما ⁦crypt⁩ فلا تستخدم إلا أول 8 أحرف مع خوارزمية ⁦DES⁩ القديمة. ويُبقي أباتشي الصيغتين للتوافق لا للأمان، فاستبدل بأي سطر منهما سطرًا بصيغة ⁦bcrypt⁩.

ما معامل التكلفة المناسب في ⁦bcrypt⁩ لملف htpasswd؟

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

كيف أحمي مجلدًا بكلمة مرور باستخدام هذا الملف؟

ارفع الأسطر باسم ⁦.htpasswd⁩، ويُفضَّل خارج المجلد العام للموقع. وفي ملف ⁦.htaccess⁩ للمجلد أو في إعدادات الموقع أضف ⁦AuthType Basic⁩ واسمًا في ⁦AuthName⁩ و⁦AuthUserFile⁩ مع المسار الكامل للملف و⁦Require valid-user⁩. ثم قدّم الموقع عبر ⁦HTTPS⁩ حتى لا تُرسل كلمة المرور نصًا واضحًا.

لماذا أحصل على سطر مختلف في كل مرة مع كلمة المرور نفسها؟

يتضمن كل سطر ملحًا عشوائيًا جديدًا محفوظًا داخل التجزئة، وهذا مقصود: فهو يمنع المهاجمين من ملاحظة المستخدمين الذين يتشاركون كلمة مرور، ومن استخدام الجداول المحسوبة مسبقًا. وكل هذه الأسطر تقبل كلمة المرور نفسها، ويؤكد ذلك خيار «التحقق من سطر».