.htaccess المصادقة الأساسية بواسطة المضيف الظاهري؟
-
27-10-2019 - |
سؤال
كنت أتساءل عما إذا كان من الممكن إعداد متطلبات مصادقة http الأساسية المشروطة استنادًا إلى عنوان URL للمضيف الظاهري في ملف htaccess.
على سبيل المثال، ما أريد فعله هو تشغيل mysite.com وtest.mysite.com على نفس قاعدة التعليمات البرمجية في نفس الدليل مع حماية كلمة المرور test.mysite.com.سيتم إعداده بهذه الطريقة حتى لا أحتاج إلى تفرع الكود الخاص بي نظرًا لأن كود التطبيق الخاص بي يمكنه رؤية vhost/url الذي يتم تقديمه منه واختيار قاعدة البيانات لعرض المحتوى منها.
المحلول
يمكنك نوعًا من الحماقة باستخدام mod_setenvif
جنبا إلى جنب مع mod_auth
وحدات.استخدم ال SetEnvIfNoCase
التوجيه لتعيين المضيف المحمي بكلمة مرور.ستحتاج إلى بعض التوجيهات الإضافية لتلبية الوصول:
# Check for the hostname here
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST
ثم داخل Directory
حظر (أو فقط في العلن) لديك إعداد عناصر المصادقة الخاصة بك، شيء من هذا القبيل:
AuthUserFile /var/www/test.mysite.com/htpasswd
AuthType Basic
AuthName "Password Protected"
الآن بالنسبة للأشياء التي تتطلب/تلبيتها:
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!PROTECTED_HOST
سيؤدي هذا إلى منع أي مضيف غير مطابق ^test\.mysite\.com\.?(:80)?$
سيكون له حق الوصول دون الحاجة إلى المصادقة (Allow from env=!PROTECTED_HOST
) لكن بخلاف ذلك، نحتاج إلى مستخدم صالح (Require valid-user
).ال Satisfy any
يضمن أننا نحتاج فقط إلى واحد من الاثنين، إما السماح أو الطلب.
نصائح أخرى
أواجه مشكلات في تنفيذ حل جون: على الرغم من أنني معتاد تمامًا على Apache conf والتعبيرات العادية ، إلا أن المصادقة تعمل دائمًا.من خلال التحليلات السريعة ، بدا أن خط الترميز العام لم يبدأ.
لكنني وجدت حلاً آخر يبدو أكثر أمانًا بالنسبة لي:
لقد أنشأت مضيفين افتراضيين للنطاقين يشيران إلى جذر المستند نفسه (وهو مسموح به تمامًا بالمناسبة).أضفت توجيهات المصادقة الأساسية في أحد المضيفات الافتراضية (مباشرة إلى كتلة توجيه vhost).
تعمل كالسحر.ولدي شعور أفضل بأن هذا آمن حقًا - لا توجد مخاطرة في التغاضي عن أي تفاصيل في نمط regex من شأنها أن تفتح البوابات للمتطفلين. Genacodicetagpre
فيما يلي حل مشابه لما اقترحه جون لين ، ولكن باستخدام رمز الترميز العام للتحقق من اسم المضيف: Genacodicetagpre