ملفات تعريف الارتباط يحتفظ هذا الموقع بما يحتاجه للعمل فقط. لا توجد عليه اليوم أي أدوات تحليل أو إعلانات، ولا شيء هنا يتتبعك إلى مواقع أخرى. اقرأ سياسة الخصوصية

اختر ما تسمح به
+92 312 8299940عرض سعر مجاني
Blog

HSTS: كيف تضيف Strict-Transport-Security بأمان

شرح مبسّط لـ HSTS: ماذا يحمي ترويسة Strict-Transport-Security، وكيف تضيفها في htaccess، وكيف ترفع max-age دون مخاطرة.

By the Denwix team 6 min read

ما هو HSTS؟

يعني HSTS أمان النقل الصارم عبر HTTP. وهو ترويسة استجابة واحدة اسمها Strict-Transport-Security. تقول للمتصفح: لهذا الموقع استخدم HTTPS فقط من الآن.

بعد أن يرى المتصفح الترويسة، يحوّل كل رابط http:// إلى https:// قبل أن يرسل أي شيء. كما يمنع الزائر من تجاوز تحذير الشهادة. ونتيجة لذلك لا يستطيع أحد إعادة هذا الزائر خفية إلى HTTP.

رسم: يستلم المتصفح ترويسة HSTS، ويتذكر استخدام HTTPS فقط، ثم يذهب مباشرة إلى HTTPS
يحوّل HSTS إعادة توجيه لمرة واحدة إلى قاعدة يتذكرها المتصفح.

الثغرة التي يغلقها HSTS

تعيد معظم المواقع توجيه HTTP إلى HTTPS. هذا جيد، لكنه يترك ثغرة. فالطلب الأول ما زال يخرج عبر HTTP العادي، وبعده فقط يرد الخادم بإعادة التوجيه.

على شبكة Wi-Fi عامة يكون هذا الطلب الأول هو اللحظة الضعيفة. فقد يرد مهاجم على الشبكة نفسها أولًا ويُبقي الزائر على نسخة HTTP مزيفة من موقعك. وتسمى هذه الحيلة SSL stripping.

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

كيف تضيف HSTS في htaccess

أولًا، تأكد أن كل صفحات موقعك تعمل عبر HTTPS، بما فيها الصور والسكربتات والنطاقات الفرعية التي تستخدمها. ثم أضف سطرًا واحدًا إلى ملف .htaccess على Apache:

Header always set Strict-Transport-Security "max-age=300"

ابدأ بقيمة max-age قصيرة قدرها 300 ثانية أثناء الاختبار. فإذا تعطل شيء، تنسى المتصفحات القاعدة خلال خمس دقائق. وعلى Nginx يوضع السطر نفسه في كتلة خادم HTTPS:

add_header Strict-Transport-Security "max-age=300" always;
عرض: الفحص يُظهر أن Strict-Transport-Security يُرسل بعد إضافة سطر واحد إلى htaccess
بعد سطر واحد في htaccess تُرسل ترويسة Strict-Transport-Security.

بعد ذلك افحص النتيجة باستخدام فاحص ترويسات HTTP المجاني. فهو يبيّن إن كانت الترويسة تصل وما قيمة max-age فيها.

كيف ترفع max-age بأمان

تشغيل HSTS سهل، لكن إيقافه بطيء. فالمتصفح يحتفظ بالقاعدة طوال مدة max-age حتى لو حذفت الترويسة. لذلك ارفعها على مراحل:

  1. 300 ثانية (خمس دقائق) أثناء الاختبار.
  2. 86400 ثانية (يوم) عندما لا يتعطل شيء.
  3. 604800 ثانية (أسبوع) بعد أيام هادئة.
  4. 31536000 ثانية (سنة) عندما تعمل كل الصفحات عبر HTTPS منذ فترة.

السنة هي القيمة التي توصي بها معظم الأدلة للموقع المنشور. وهي أيضًا الحد الأدنى لقائمة التحميل المسبق.

includeSubDomains وpreload

يطبّق الخيار includeSubDomains القاعدة على كل نطاق فرعي أيضًا. أضفه فقط عندما تعمل كل النطاقات الفرعية عبر HTTPS، حتى القديمة منها مثل أداة داخلية أو لوحة بريد.

أما الخيار preload فيذهب خطوة أبعد. فالمتصفحات تحمل قائمة مدمجة بمواقع HSTS، لذلك حتى الزيارة الأولى تستخدم HTTPS. لكن الخروج من هذه القائمة يستغرق شهورًا. لذا أرسل نطاقك إلى hstspreload.org فقط عندما تكون متأكدًا.

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

HSTS على خوادم وشبكات CDN أخرى

الفكرة واحدة في كل مكان: إرسال ترويسة في كل استجابة HTTPS. ولهذا يتغير فقط المكان الذي تكتبها فيه.

Cloudflare

في لوحة Cloudflare افتح SSL/TLS ثم Edge Certificates، وفعّل HSTS. واختر هناك قيمة max-age. ولأن Cloudflare يرسل الترويسة بنفسه، لا تحتاج سطرًا إضافيًا في htaccess.

ووردبريس

إذا لم تستطع تعديل الخادم، يمكن لإضافة أمان أن تضيف الترويسة. لكن قاعدة الخادم أسرع، لأنها تعمل حتى قبل أن يبدأ PHP.

IIS

على خوادم ويندوز أضف ترويسة مخصصة باسم Strict-Transport-Security في ترويسات استجابة HTTP للموقع. ثم افحصها باستخدام فاحص الترويسات.

كيف تختبر HSTS وتزيله

أولًا، اختبر من الخارج باستخدام فاحص ترويسات HTTP. فهو يعرض الترويسة وقيمة max-age التي يستلمها الزوار بالضبط.

في Chrome يمكنك أيضًا فتح chrome://net-internals/#hsts والاستعلام عن نطاقك. فيعرض إن كان المتصفح قد حفظ القاعدة ومتى تنتهي. وفي الصفحة نفسها يمكنك حذف القاعدة من متصفحك أثناء الاختبار.

لإزالة HSTS للجميع، أرسل max-age=0 لفترة بدل حذف الترويسة. ثم ينسى كل متصفح يزورك القاعدة. بعد ذلك يمكنك حذف السطر.

أخطاء شائعة

  • البدء بقيمة max-age لسنة. فإذا تعطل HTTPS يبقى الزوار ممنوعين حتى تنتهي السنة.
  • إضافة includeSubDomains بينما ما زال نطاق فرعي بلا شهادة.
  • إرسال الترويسة عبر HTTP. فالمتصفحات تتجاهلها هناك، ولا تُحتسب إلا عبر HTTPS.
  • نسيان الكلمة always، فتخرج صفحات الخطأ بلا ترويسة.
  • إرسال النطاق إلى قائمة التحميل المسبق للتجربة.

باختصار، HSTS سطر واحد، لكن max-age وعد. ارفعه ببطء وافحص كل خطوة باستخدام فاحص ترويسات HTTP. ولشرح كل توجيه بالتفصيل راجع دليل MDN عن Strict-Transport-Security.

أسئلة وأجوبة

ماذا يفعل HSTS؟

يخبر المتصفح أن يستخدم HTTPS فقط لموقعك لمدة محددة. وبعد الزيارة الأولى لا يرسل المتصفح أي طلب HTTP عادي إلى موقعك.

هل ما زلت أحتاج إعادة التوجيه من HTTP إلى HTTPS مع HSTS؟

نعم. فإعادة التوجيه تغطي الزيارة الأولى قبل أن يرى المتصفح الترويسة، ويغطي HSTS كل زيارة بعدها.

ما قيمة max-age المناسبة لـ HSTS؟

ابدأ بـ 300 ثانية أثناء الاختبار، ثم ارفعها على مراحل. وللموقع المنشور تكون 31536000 ثانية (سنة) هي القيمة النهائية المعتادة.

كيف أزيل HSTS؟

أرسل الترويسة مع max-age=0. فتحذف المتصفحات القاعدة في الزيارة التالية عبر HTTPS، وحتى ذلك الحين تحتفظ بالقاعدة القديمة.

هل HSTS مفيد للسيو؟

ليس بشكل مباشر. لكنه يزيل قفزة إعادة توجيه للزوار العائدين ويحميهم، وهذا يساعد السرعة والثقة.

لماذا لا تظهر ترويسة HSTS عندي؟

تأكد أنها تُرسل عبر HTTPS، وأن وحدة headers في Apache مفعّلة، وأن شبكة CDN أو ذاكرة مؤقتة لا تحذفها. ويعرض فاحص ترويسات HTTP ما يصل فعلًا.

ما هو التحميل المسبق لـ HSTS؟

قائمة مدمجة في المتصفحات حتى تستخدم الزيارة الأولى HTTPS. تحتاج max-age لسنة وincludeSubDomains وpreload، ثم ترسل النطاق إلى hstspreload.org.

هل يمكن أن يمنع HSTS الزوار؟

نعم، إذا تعطل HTTPS بينما قيمة max-age طويلة مفعّلة. لهذا تبدأ بقيمة قصيرة ولا ترفعها إلا عندما يعمل كل شيء.

هل يبطئ HSTS موقعي؟

لا. فهو يزيل إعادة التوجيه من HTTP إلى HTTPS للزوار العائدين، لذلك تفتح الصفحات أسرع قليلًا.

أين أفعّل HSTS في Cloudflare؟

في SSL/TLS ثم Edge Certificates تحت HTTP Strict Transport Security. وبذلك لا تحتاج إضافته في htaccess أيضًا.

هل يمكنني إضافة HSTS بإضافة ووردبريس؟

نعم، كثير من إضافات الأمان ترسله. لكن قاعدة في htaccess أو Nginx أسرع وتغطي أيضًا الملفات خارج ووردبريس.

لماذا تُرسل ترويسة HSTS مرتين؟

لأن الخادم وشبكة CDN أو إضافة يضيفانها في الوقت نفسه. أبقِ مصدرًا واحدًا حتى تكون قيمة max-age واضحة.

كيف أعرف إن كان Chrome قد حفظ قاعدة HSTS؟

افتح chrome://net-internals/#hsts واستعلم عن نطاقك. ويمكنك أيضًا حذف القاعدة من متصفحك هناك.

هل يعمل HSTS على localhost؟

تتجاهل المتصفحات HSTS على localhost وعناوين IP، لذلك يُختبر على نطاق حقيقي.

ماذا يحدث إذا انتهت الشهادة وHSTS مفعّل؟

لا يستطيع الزوار الذين رأوا القاعدة تجاوز التحذير. ولهذا يصبح التجديد التلقائي للشهادة أهم مع HSTS.

هل HSTS مثل إعادة التوجيه 301؟

لا. فإعادة التوجيه يرسلها الخادم مع كل طلب HTTP. أما HSTS فيجعل المتصفح يتخطى طلب HTTP تمامًا.

هل يجب أن تستخدم كل النطاقات الفرعية HTTPS قبل includeSubDomains؟

نعم. افحص كل نطاق فرعي، حتى القديم منها والأدوات الداخلية، قبل إضافة الخيار.

كم يستغرق دخول قائمة التحميل المسبق؟

عادة من أسابيع إلى شهور، لأن القائمة تصل مع إصدارات المتصفحات الجديدة.

هل يحمي HSTS من كل الهجمات؟

لا. فهو يمنع الرجوع إلى HTTP العادي. لذلك تحتاج ترويسات أخرى مثل Content-Security-Policy للمخاطر الأخرى.

هل يفحص مدقق السيو HSTS؟

نعم. يعرض مدقق السيو لدينا إن كانت الترويسة تُرسل، ويقودك إلى هذا الدليل عندما تكون مفقودة.

دليل بالفيديو

كيف تضيف HSTS بأمان

في هذا الفيديو القصير تمرّ الأداة أمامك من أول خطوة إلى آخرها. اختر لغتك من القائمة بالأسفل، وفعّل الترجمة النصية إذا كانت تساعدك.

افحص ترويسة HSTS الآن

أدخل رابطك في فاحص ترويسات HTTP لترى إن كانت Strict-Transport-Security تُرسل وما قيمة max-age.