حتی با HTTPS، سایت شما تا صد در صد امن نیست. حمله Downgrade میتونه کاربر رو مجبور به استفاده از HTTP کنه. HSTS راه‌حل این مشکله. تو این مقاله کامل توضیح میدم.

مشکل HTTPS تنها

وقتی کاربر تایپ میکنه example.com، مرورگر اول HTTP امتحان میکنه. سرور Redirect میکنه به HTTPS. ولی این HTTP اولیه هک بشوند و کاربر رو به سایت جعلی هدایت کنن.

HSTS چیه؟

HTTP Strict Transport Security یه Header HTTP هست که به مرورگر میگه: از الان به بعد فقط HTTPS استفاده کن. حتی اگه کاربر HTTP تایپ کنه.

فعال‌سازی HSTS

Nginx

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

Apache

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

Cloudflare

SSL/TLS → Edge Certificates → HSTS → Enable

پارامترها

max-age: مدت اعتبار (ثانیه). 31536000 = یک سال.
includeSubDomains: همه ساب‌دامین‌ها هم شامل بشن.
preload: در لیست Preload گوگل قرار بگیره.

HSTS Preload

لیست دائمی سایت‌های HTTPS-only در مرورگرها. اضافه شدن دائمیه.

مراحل:
۱. Header با preload قرار بدید
۲. به hstspreload.org برید
۳. دامنه رو submit کنید

احتیاط قبل Preload

Preload تقریباً غیرقابل حذفه. مطمئن شید:
- کل سایت HTTPS داره
- همه ساب‌دامین‌ها HTTPS
- SSL معتبر و مدام تجدید میشه

Testing HSTS

مرورگر:
chrome://net-internals/#hsts

یا ابزار آنلاین: hstspreload.org

Downgrade Attack جلوگیری

با HSTS، حتی اگه هکر بین کاربر و سرور بشینه، نمیتونه HTTPS رو به HTTP downgrade کنه.

Cookie با HTTPS

Cookie ها هم Secure و HttpOnly باشن:
Set-Cookie: session=abc; Secure; HttpOnly; SameSite=Strict

Content Security Policy

مکمل HSTS. جلوی XSS و Injection رو میگیره.

Mixed Content

وقتی HTTPS سایت شامل تصویر HTTP باشه، مرورگر خطا میده. با HSTS کاملاً بلاک میشه.

پیدا کردن HTTP Assets

Chrome DevTools → Security
جستجو در کد: grep -r "http://" *.html

SSL Labs Test

ssllabs.com/ssltest برای بررسی کامل SSL و HSTS.

HTTPS Everywhere

افزونه مرورگر که HTTP رو خودکار به HTTPS تبدیل میکنه.

SSL Certificate

حتماً از CA معتبر SSL بگیرید. Let's Encrypt رایگان.

مشکلات HSTS

سایت داخلی HTTPS نداره

اگه includeSubDomains بذارید و ساب‌دامین‌های داخلی HTTPS ندارن، در دسترس نمیشن.

SSL معتبر نیست

اگه SSL Expired بشه، سایت غیرقابل دسترسیه. Monitoring حتمی.

Rollback سخته

اگه HSTS رو غلط تنظیم کردید، رفع میشه ولی زمان میبره.

Best Practices

شروع کم: max-age=300 برای تست
Increase: بعد از تست، max-age=31536000
includeSubDomains: اگه مطمئنید
preload: بعد از یه ماه پایداری

سباهاست

هاست‌های سباهاست با HTTPS رایگان (Let's Encrypt) و راهنمای HSTS ارائه میشن.

جمع‌بندی

HSTS یه لایه امنیتی ساده ولی حیاتی برای سایت‌های HTTPS هست. با یه Header، از حملات Downgrade جلوگیری کنید.