HSTS (HTTP Strict Transport Security) ترويسة استجابة تأمر المتصفّح بالاتّصال بموقعك عبر HTTPS حصرًا، فتمنع أي محاولة اتّصال غير مشفّر أو هبوط إلى HTTP حتى لو كتب المستخدم http://.
كيف تعمل
عند زيارة موقعك لأوّل مرّة عبر اتّصال آمن، يستجيب الخادم بترويسة Strict-Transport-Security فيسجّل المتصفّح أنّ هذا النطاق يجب التعامل معه عبر HTTPS حصرًا طوال المدّة المحدّدة. بعد ذلك، وحتى لو كتب المستخدم العنوان بصيغة غير آمنة أو نقر رابطًا غير مشفّر، يحوّل المتصفّح الطلب داخليًّا إلى HTTPS قبل إرساله إلى الشبكة، فلا يخرج أي طلب غير مشفّر إطلاقًا. هنا تكمن قيمة هذه السياسة الأمنية: فبدونها يبدأ المتصفّح عادةً بطلب غير آمن ثم يُحوَّل عبر إعادة توجيه من الخادم، وتلك اللحظة القصيرة بين الطلب الأوّل والتحويل هي بالضبط ما يستغلّه المهاجم. ففي هجوم «تجريد التشفير» (SSL stripping) يجلس المهاجم في منتصف الطريق بين الزائر والخادم، يعترض الطلب الأوّل غير المشفّر، ويبقي الزائر على اتّصال عاديّ بينما يتحدّث هو وحده مع الخادم بأمان، فيقرأ كلّ ما يكتبه الزائر من كلمات مرور وبيانات. وكذلك يمكن دفع المتصفّح قسرًا إلى الهبوط من HTTPS إلى HTTP لتمرير البيانات بالنصّ الصريح. ولأنّ المتصفّح مع هذه السياسة يرفض أصلًا أن يصدر أي طلب غير مشفّر لهذا النطاق، تُغلق نافذة الاعتراض من جذرها قبل أن تبدأ.
الموجِّهات والقائمة المسبقة
تتكوّن الترويسة من موجِّه إلزامي وآخرَين اختياريَّين. max-age يحدّد بالثواني المدّة التي يتذكّر فيها المتصفّح القاعدة (مثلًا 31536000 ثانية = سنة)، ويتجدّد العدّاد مع كلّ زيارة لاحقة. includeSubDomains يوسّع القاعدة لتشمل كلّ النطاقات الفرعية تحت نطاقك. أمّا preload فيتجاوز قيد «أوّل زيارة»: إذ توجد قائمة الإدراج المسبق (HSTS preload list) مدمجة في المتصفّحات الكبرى، فمتى أُدرج نطاقك فيها طبّقت المتصفّحات HTTPS الإلزامي من الزيارة الأولى دون انتظار أي ترويسة. الإدراج طوعيّ ويتطلّب وجود الموجِّهات الثلاثة معًا وقيمة max-age كافية.
المتطلّبات والمخاطر
قبل التفعيل لا بدّ من شهادة SSL صالحة وHTTPS يعمل بثبات على النطاق وكلّ ما تنوي شموله. هذا ليس تفصيلًا شكليًّا بل شرط حاسم، لأنّ HSTS سلاح ذو حدّين: فأنت تقفل كلّ زوّارك على HTTPS طوال max-age، فإن انتهت صلاحية شهادتك أو تعطّل HTTPS لأي سبب لن يستطيع المتصفّح الرجوع إلى HTTP، وسيرى الزائر صفحة خطأ يتعذّر تجاوزها حتى تُصلح. وقبل إضافة includeSubDomains تأكّد أنّ جميع نطاقاتك الفرعية — حتى الداخلية والإدارية — تدعم HTTPS، وإلا تعطّلت. وانتبه أنّ preload يصعب التراجع عنه: فإزالة النطاق من القائمة المدمجة في المتصفّحات تستغرق دورات تحديث طويلة قد تمتدّ أشهرًا.
كيف تفعّلها بأمان
اتّبع التدرّج بدل القفز المباشر، لأنّ القيمة العالية تلتصق في المتصفّحات فورًا ولا يمكن سحبها بسهولة. ابدأ بقيمة مدّة صغيرة جدًّا — بضع دقائق أو ساعات — وراقب موقعك في هذه الفترة للتحقّق أنّ كلّ صفحة وكلّ مورد يُحمَّل عبر HTTPS دون كسر أو تحذير. فإذا اطمأننت، ارفع المدّة تدريجيًّا إلى أيام، ثم أسابيع، ثم سنة كاملة، على أن يكون رفع كلّ مستوى مسبوقًا بتأكّدك من استقرار الشهادة وعمل تجديدها التلقائي قبل اقتراب انتهائها. لا تضف شمول النطاقات الفرعية إلا بعد جردٍ دقيق لكلّ نطاق فرعيّ — بما فيها النطاقات الداخلية والإدارية وبيئات الاختبار — والتأكّد أنّها جميعًا تدعم HTTPS، إذ يكفي نطاق فرعيّ واحد بلا تشفير ليتعطّل. أمّا الإدراج المسبق فأجّله إلى آخر خطوة، ولا تطلبه إلا حين تكون واثقًا تمامًا من التزامك الدائم والطويل بـHTTPS على النطاق وكلّ فروعه، لأنّ التراجع عنه عمليّة مكلِفة وبطيئة قد تستغرق أشهرًا حتى تنتشر عبر تحديثات المتصفّحات. هذا التدرّج المدروس يمنحك كامل فوائد الحماية، ويجنّبك في الوقت نفسه أسوأ سيناريو ممكن: أن تقفل موقعك على زوّارك وعلى نفسك دون طريق سريع للعودة.
| الموجِّه | الأثر |
|---|---|
max-age=31536000 | فرض HTTPS لسنة |
includeSubDomains | يشمل النطاقات الفرعية |
preload | إدراج مسبق في المتصفّحات |