عاجل ومؤقت: ثغرة PHP حرجة. كيف تفحص ←

كيف تضيف HSTS إلى موقعك

إذا أظهر فحص أمان نطاقك أن HSTS غير مُعدّ، فإن المتصفحات التي تزور موقعك ليست مُلزَمة باستخدام HTTPS في كل طلب. يشرح هذا الدليل كيف تضيف ترويسة Strict-Transport-Security بشكل صحيح.

ماذا تعني هذه النتيجة

HSTS (HTTP Strict Transport Security) ترويسة استجابة HTTP تُخبر المتصفحات باستخدام HTTPS دائمًا عند الاتصال بنطاقك — ورفض اتصالات HTTP تمامًا لمدة محددة. ومن دون HSTS، حتى لو كان خادمك يعيد توجيه HTTP إلى HTTPS، فقد يُرسَل أول طلب للمستخدم في اتصال جديد لوهلة عبر HTTP غير المشفّر قبل أن تحدث إعادة التوجيه.

لماذا يهم ذلك

  • يمنع هجمات SSL stripping التي يخفّض فيها المهاجم الاتصال من HTTPS إلى HTTP
  • يزيل نافذة الضعف في أول طلب HTTP
  • مطلوب للتحميل المسبق لـHSTS (HSTS preloading) — وهي القائمة التي تحتفظ بها المتصفحات للمواقع التي تعمل دائمًا عبر HTTPS
  • يعزز ثقة المستخدمين، ويُعدّ دليلًا مفيدًا في معظم تقييمات النطاقات

قيمة ترويسة HSTS الصحيحة

ابدأ بقيمة max-age قصيرة، وزِدها بعد أن تتأكد من أن HTTPS يعمل بشكل موثوق في نطاقك بالكامل.

قيمة البداية (آمنة)

تُخبر هذه القيمة المتصفحات باستخدام HTTPS لمدة ٢٤ ساعة:

Strict-Transport-Security: max-age=86400

القيمة الموصى بها (بعد التأكد من أنها تعمل)

تفرض هذه القيمة HTTPS لمدة سنة على جميع النطاقات الفرعية:

Strict-Transport-Security: max-age=31536000; includeSubDomains

قيمة جاهزة للتحميل المسبق (اختياري)

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
قبل إضافة preload: يصعب التراجع عن التحميل المسبق لـHSTS. فلا تُضف التوجيه preload إلا عندما تكون متأكدًا من أن كل نطاق فرعي في نطاقك يقدّم HTTPS بشكل صحيح. وبعد تقديم النطاق إلى قائمة التحميل المسبق، يستغرق انتشار حذفه منها شهورًا.

كيف تضيف الترويسة — بحسب المنصة

Cloudflare

Settings → SSL/TLS → Edge Certificates → HTTP Strict Transport Security → Enable. اضبط max-age على ٦ أشهر على الأقل. ويضيف Cloudflare الترويسة تلقائيًا.

Nginx

أضف إلى كتلة server:

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

Apache

أضف إلى ملف .htaccess أو إلى إعدادات VirtualHost:

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

Vercel

أضف إلى vercel.json:

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Strict-Transport-Security",
          "value": "max-age=31536000; includeSubDomains"
        }
      ]
    }
  ]
}

Netlify

أضف إلى netlify.toml:

[[headers]]
  for = "/*"
  [headers.values]
    Strict-Transport-Security = "max-age=31536000; includeSubDomains"

تحقق من نجاح الإجراء

افحص نطاقك على mydomainrisk.com — ستُظهر نتيجة HSTS قيمة max-age المرصودة وما إذا كان includeSubDomains وpreload موجودين.

افحص ترويسات الأمان

يفحص MyDomainRisk ترويسات HSTS وCSP وX-Frame-Options وReferrer-Policy وPermissions-Policy وغيرها — مجانًا.

افحص نطاقًا مجانًا ←