قاموس السيو

ما المقصود بـHSTS (HTTP Strict Transport Security)؟

HSTS ترويسة استجابة HTTP تخبر المتصفحات بالاتصال بالموقع عبر HTTPS فقط لمدة محددة، فتمنع هجمات خفض البروتوكول.

افحصه مجانًا: فحص رؤوس الأمان

HSTS (HTTP Strict Transport Security): HSTS ترويسة استجابة HTTP تخبر المتصفحات بالاتصال بالموقع عبر HTTPS فقط لمدة محددة، فتمنع هجمات خفض البروتوكول.

HSTS (HTTP Strict Transport Security) سياسة أمان يعلنها الموقع بترويسة الاستجابة Strict-Transport-Security. وبعد أن يراها المتصفح عبر اتصال HTTPS صالح، يرفض استخدام HTTP العادي لذلك المضيف حتى تنتهي السياسة: تُرقّى روابط http:// المكتوبة داخليا قبل أن يغادر أي طلب الجهاز، ولا يعود ممكنا تجاوز أخطاء الشهادة بالنقر. وتعرّف الآلية في RFC 6797.

الترويسة

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age: المدة، بالثواني، التي يتذكر فيها المتصفح السياسة (31536000 = سنة واحدة).
  • includeSubDomains: تطبيق السياسة على كل النطاقات الفرعية أيضا.
  • preload: يدل على الموافقة على الإدراج في قائمة التحميل المسبق المضمّنة في المتصفحات. وليس جزءا من RFC؛ بل تستخدمه قائمة HSTS preload التي يديرها مشروع Chromium وتشاركها المتصفحات الكبرى الأخرى.

في Nginx أرسلها على استجابات HTTPS فقط:

server {
    listen 443 ssl;
    server_name www.example.com;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

لماذا يهم؟

بلا HSTS، إذا كتب الزائر example.com فإنه يرسل أول طلب عبر HTTP ويعتمد على تحويل 301 لديك ليصل إلى HTTPS. وفي شبكة معادية يمكن اعتراض ذلك الطلب الأول غير المشفّر وإبقاء المستخدم على نسخة HTTP مزيفة، وهذا هجوم نزع SSL (SSL stripping). يسد HSTS هذه الثغرة للزوار العائدين، وتسدها قائمة preload حتى للزيارات الأولى.

وله فائدة في الأداء: فبالنسبة إلى المتصفحات التي تدعم HSTS تختفي قفزة HTTP إلى HTTPS، لأن المتصفح يرقّي الرابط بنفسه (تعرضه أدوات المطور كتحويل 307 داخلي). وHSTS ليس عامل ترتيب، لكنه يكمل إعداد HTTPS نظيفا تتوقعه جوجل والمستخدمون أصلا.

تفعيله بأمان

  1. تأكد أن كل صفحة ونطاق فرعي يعمل عبر HTTPS بشهادة صالحة.
  2. ابدأ بقيمة max-age قصيرة، مثل 300 ثانية، وراقب المشكلات.
  3. ارفعها إلى أسبوع، ثم شهر، ثم سنة.
  4. أضف includeSubDomains فقط حين يدعم كل نطاق فرعي HTTPS، بما فيها مضيفات الاختبار القديمة والبريد وأدوات الشبكة الداخلية.
  5. قدّم طلب التحميل المسبق في النهاية، وفقط إن كنت متأكدا. تشترط قائمة preload قيمة max-age لا تقل عن سنة مع includeSubDomains وpreload، وتستغرق الإزالة شهورا لتصل إلى متصفحات المستخدمين.

أخطاء شائعة

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

كيف تفحصه

تقيّم أداة فحص رؤوس الأمان ترويسة Strict-Transport-Security لديك مع باقي رؤوس الأمان (Security Headers)، وتقدم حلولا جاهزة للنسخ لـApache وNginx وCloudflare. وتؤكد أداة فحص شهادة SSL الشهادة وتحويل HTTP إلى HTTPS اللذين يعتمد عليهما HSTS.

الأسئلة الشائعة

هل HSTS عامل ترتيب؟

لا. HSTS إجراء أمني لا إشارة ترتيب. يكمل HTTPS الذي هو إشارة خفيفة، ويزيل قفزة التحويل من HTTP إلى HTTPS للزوار العائدين.

ما قيمة max-age التي أستخدمها مع HSTS؟

ابدأ بقيمة صغيرة، مثل 300 ثانية، أثناء الاختبار. وحين يعمل HTTPS في كل مكان انتقل إلى سنة واحدة (31536000 ثانية)، وهي أيضا الحد الأدنى لقائمة preload.

هل أستطيع التراجع عن HSTS؟

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