ما هو HSTS؟
HSTS (أمان النقل الصارم عبر HTTP) هو آلية لأمن الويب تُخبر المتصفحات بالتفاعل مع موقع ويب عبر HTTPS فقط، وليس HTTP مطلقاً. وبمجرد رؤية المتصفح لرأس HSTS، سيحوّل جميع الطلبات المستقبلية تلقائياً إلى HTTPS ويرفض الاتصال عبر HTTP العادي، حتى إذا كتب المستخدم http://. صراحةً.
لماذا يهم HSTS؟
حتى مع شهادة SSL صالحة، تبقى هناك ثغرات:
هجوم إزالة SSL
1. يكتب المستخدم «example.com» (من دون https://)
2. يعترض المهاجم طلب HTTP الأولي
3. يمرر المهاجم الطلب إلى HTTPS ويعرض HTTP للمستخدم
4. يظن المستخدم أنه آمن، بينما يرى المهاجم كل شيء
يمنع HSTS ذلك بضمان ألا تنشئ المتصفحات طلب HTTP الأولي أبداً.
فوائد HSTS
- يمنع هجمات خفض المستوى: لا يوجد رجوع إلى HTTP
- يحمي إشارات المستخدم المرجعية: تصبح حتى الإشارات القديمة إلى HTTP إشارات HTTPS
- يلغي المحتوى المختلط: تُفرض HTTPS أيضاً على الموارد الفرعية
- يحسن الأداء: لا حاجة إلى عمليات إعادة توجيه HTTP→HTTPS
صيغة رأس HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
التوجيهات
| التوجيه | الوصف |
|---|---|
| max-age | عدد الثواني التي يتذكر فيها المتصفح تفعيل HSTS (31536000 = سنة واحدة) |
| includeSubDomains | تطبيق حماية HSTS على جميع النطاقات الفرعية |
| preload | الموافقة على إدراج النطاق في قائمة التحميل المسبق الخاصة بالمتصفح |
تطبيق HSTS
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Cloudflare
يمكن تفعيل HSTS في Cloudflare من المسار SSL/TLS → Edge Certificates → HTTP Strict Transport Security داخل لوحة التحكم، ثم مراجعة إعدادات الحماية قبل تطبيقها على النطاق
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
قائمة HSTS للتحميل المسبق
قائمة HSTS للتحميل المسبق هي قائمة نطاقات مضمّنة في المتصفحات، ولا ينبغي الوصول إليها إلا عبر HTTPS. وتلغي حتى خطر طلب HTTP الأول.
متطلبات التحميل المسبق
1. استخدم شهادة SSL صالحة وموثوقة
2. أعد توجيه جميع طلبات HTTP إلى HTTPS لضمان اتصال آمن
3. استخدم رأس HSTS يتضمن التوجيهات التالية:
- max-age بقيمة لا تقل عن 31536000 (سنة واحدة)
- التوجيه includeSubDomains لتطبيق السياسة على جميع النطاقات الفرعية
- التوجيه preload لطلب إدراج النطاق في قائمة التحميل المسبق
4. يجب أن تدعم جميع النطاقات الفرعية اتصال HTTPS قبل الإرسال إلى القائمة
الإرسال إلى قائمة التحميل المسبق
1. تحقق من المتطلبات: استخدم hstspreload.org للتحقق
2. أرسل النطاق: أدخل النطاق في hstspreload.org
3. انتظر الإدراج: قد يستغرق تحديث المتصفحات أسابيع أو أشهر
تحذيرات التحميل المسبق
التحميل المسبق دائم عملياً. تستغرق إزالته من القائمة أشهراً وتتطلب تحديثات للمتصفحات. لا تستخدمه إلا إذا كنت متأكداً من أن جميع النطاقات الفرعية ستدعم HTTPS إلى أجل غير مسمى.التحقق من HSTS
أدوات مطوري المتصفح:1. افتح أدوات المطور، ثم انتقل إلى تبويب Network
2. حمّل الموقع وانتظر اكتمال الاستجابة
3. افحص Response Headers بحثاً عن الرأس Strict-Transport-Security للتأكد من وصول سياسة HSTS
باستخدام curl:curl -I https://example.com | grep -i strict
باستخدام DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
حالة التحميل المسبق:
تحقق من hstspreload.org لمعرفة ما إذا كان النطاق محمّلاً مسبقاً.
استراتيجية نشر HSTS
المرحلة 1: max-age قصير
ابدأ بقيمة max-age قصيرة للاختبار:
Strict-Transport-Security: max-age=300
إذا حدث خلل، فلن يحتفظ المستخدمون بالتخزين المؤقت إلا لمدة 5 دقائق.
المرحلة 2: زيادة المدة
بعد التأكد من عمل HTTPS في كل مكان:
Strict-Transport-Security: max-age=86400
المرحلة 3: إضافة النطاقات الفرعية
بعد أن تدعم جميع النطاقات الفرعية HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
المرحلة 4: النشر الكامل والتحميل المسبق
بعد أشهر من التشغيل المستقر:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
ثم أرسل النطاق إلى قائمة التحميل المسبق.
مشكلات HSTS الشائعة
نطاق فرعي من دون HTTPS: قد يؤدي تفعيل includeSubDomains إلى تعطيل ذلك النطاق الفرعي، لأن المتصفح سيطلب اتصالاً آمناً به قبل السماح بالوصول. بيئات التطوير: قد يؤدي HSTS المخزن مؤقتاً من الإنتاج إلى تعطيل التطوير المحلي. رؤوس CDN/Proxy: تأكد من أن الوسيط لا يحذف رأس HSTS أثناء تمرير الطلبات. محتوى مختلط: يجب أن تكون جميع الموارد عبر HTTPS، ولا يصلح HSTS موارد HTTP المضمّنة.يُعد HSTS ضرورياً لأي موقع يتعامل مع بيانات حساسة، ويوصى به بشدة لجميع مواقع HTTPS.