ما هو HSTS وكيف تُفعّله؟ (HTTP Strict Transport Security)

HSTS (HTTP Strict Transport Security) ترويسة أمان تُخبر المتصفح "اتصل بي عبر HTTPS فقط". وعند استخدامها مع إعادة توجيه 301، تمنع اعتراض حتى أول طلب http:// إلى موقعك (SSL stripping).

لماذا نحتاج HSTS؟

إذا استخدمت إعادة توجيه 301 فقط، يصل متصفح الزائر إلى الموقع أولًا عبر http:// ثم يُعاد توجيهه إلى HTTPS. هذا الطلب الأول القصير نافذة مفتوحة لمهاجم على الشبكة. مع تفعيل HSTS يحوّل المتصفح الطلب مباشرة إلى HTTPS دون إرساله أصلًا، حتى لو كُتب http في شريط العنوان.

بنية الترويسة

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age — كم ثانية يتذكّر المتصفح هذه القاعدة (31536000 = سنة واحدة).
  • includeSubDomains — تطبيق القاعدة على كل النطاقات الفرعية أيضًا.
  • preload — طلب إضافة موقعك إلى قائمة "HTTPS فقط" المدمجة في المتصفحات (انظر التنبيه أدناه).

التفعيل في Nginx

أضفها إلى كتلة server الخاصة بـ HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

التفعيل في Apache

مع تفعيل mod_headers، في المضيف الافتراضي أو ملف .htaccess:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

أمور يجب الانتباه إليها

  • تأكد أولًا أن HTTPS يعمل بالكامل. أثناء تفعيل HSTS يُحظر الوصول عبر HTTP تمامًا من جهة المتصفح؛ وإذا كانت شهادتك معطوبة فلن يتمكن الزوار من الوصول.
  • ابدأ بقيمة max-age منخفضة. في المحاولة الأولى استخدم max-age=300 (5 دقائق)، وبعد التأكد من عمل كل شيء ارفعها إلى سنة.
  • لا تتعجّل preload. الدخول إلى قائمة preload دائم والخروج منها يستغرق أسابيع؛ لا تُضِفه حتى تتأكد من بقاء كل نطاقاتك الفرعية على HTTPS بشكل دائم.

الخلاصة

يجعل HSTS HTTPS لديك إلزاميًا بترويسة من سطر واحد ويسدّ ثغرة الطلب الأول. تأكد أولًا أن شهادتك تعمل دون أخطاء؛ وإن لم تكن لديك شهادة فأنشئها عبر معالج SSL المجاني، ثم فعّل HSTS بقيمة max-age منخفضة.