ما هو HSTS؟
HSTS (HTTP Strict Transport Security) آلية أمان يوجّه بها الموقع المتصفحَ بأن "يتصل بهذا الموقع عبر HTTPS فقط". في الموقع الذي فُعِّل فيه HSTS يرقّي المتصفح محاولات الاتصال عبر HTTP إلى HTTPS تلقائيًا، فلا يصل إلى الخادم أي طلب HTTP أصلًا.
كيف يعمل HSTS؟
- يزور المتصفح موقعك أول مرة عبر HTTPS
- يرسل الخادم ترويسة
Strict-Transport-Security - يحفظ المتصفح هذه المعلومة طوال مدة
max-age - في الزيارات التالية تُرقّى روابط HTTP تلقائيًا إلى HTTPS
# Temel HSTS header
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
أخطاء HSTS الشائعة
الخطأ 1: ERR_SSL_PROTOCOL_ERROR (بسبب HSTS)
إذا انتهت صلاحية شهادة SSL أو حدثت فيها مشكلة و HSTS مفعَّل، فإن المتصفح يرفض فتح الموقع عبر HTTP أيضًا. وبخلاف خطأ SSL العادي، لا يرى المستخدم خيار "المتابعة على أي حال".
الحل
- جدّد شهادة SSL فورًا — فالبقاء بلا شهادة مع وجود HSTS يجعل الموقع غير قابل للوصول تمامًا
- يمكنك في Chrome حذف سجل HSTS الخاص بالنطاق من العنوان
chrome://net-internals/#hsts(في متصفحك أنت فقط)
الخطأ 2: لا يوجد SSL على النطاقات الفرعية مع تفعيل includeSubDomains
التوجيه includeSubDomains يفرض HTTPS على جميع النطاقات الفرعية. فإذا لم يكن على أحد النطاقات الفرعية SSL صار ذلك النطاق الفرعي غير قابل للوصول.
الحل
- ثبّت شهادة SSL على جميع النطاقات الفرعية (دفعة واحدة باستخدام Wildcard SSL)
- أو احذف التوجيه
includeSubDomains
الخطأ 3: إرسال HSTS من صفحة HTTP
ترويسة HSTS لا تكون صالحة إلا في استجابات HTTPS. أما HSTS المرسَلة في استجابة HTTP فتتجاهلها المتصفحات.
الإعداد الصحيح
# Nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # Önce HTTPS'e yönlendir
}
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # HSTS burada
}
الخطأ 4: قيمة max-age قصيرة جدًا أو صفر
القيمة max-age=0 تعطّل HSTS. والمدد القصيرة جدًا (بضع ساعات) تُضعف الأمان.
الإعدادات الموصى بها
| المرحلة | max-age | الوصف |
|---|---|---|
| الاختبار | 300 (5 دقائق) | اختبار آمن عند الإعداد الأول |
| الانتقال | 604800 (أسبوع واحد) | ارفع القيمة إذا لم تظهر مشكلات |
| الإنتاج | 31536000 (سنة واحدة) | القيمة القياسية لبيئة الإنتاج |
| Preload | 31536000+ (سنة أو أكثر) | الحد الأدنى لقائمة HSTS preload |
ما هو HSTS Preload؟
يضيف HSTS Preload نطاقك إلى قائمة HSTS المضمَّنة في Chrome (وفي المتصفحات الأخرى). وبذلك لا تُجرى أي محاولة اتصال عبر HTTP حتى في الزيارة الأولى.
متطلبات Preload
- شهادة SSL صالحة
- إعادة توجيه HTTP → HTTPS
- قيمة
max-ageلا تقل عن 31536000 (سنة واحدة) - التوجيه
includeSubDomains - التوجيه
preload
التقديم: يمكنك إرسال نطاقك عبر العنوان hstspreload.org.
⚠️ تحذير: الخروج من قائمة HSTS preload قد يستغرق شهورًا. لا تتقدم بالطلب قبل أن تكون متأكدًا.
تعطيل HSTS
لتعطيل HSTS في الحالات الطارئة:
# أرسل max-age=0
add_header Strict-Transport-Security "max-age=0" always;
# ستحذف المتصفحات سجل HSTS عند زيارتها التالية للموقع عبر HTTPS
إعداد HSTS بحسب الخادم
# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Apache (.htaccess أو VirtualHost)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# IIS (web.config)
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
الخلاصة
HSTS آلية قوية ترفع أمان موقعك بدرجة كبيرة. لكنها قد تسبّب مشكلات في الوصول إذا لم تُضبط بالشكل الصحيح. قبل تفعيل HSTS تأكد من وجود شهادة SSL على جميع النطاقات الفرعية، وارفع قيمة max-age تدريجيًا، واختبر إعدادك جيدًا قبل الإضافة إلى قائمة preload.