حتی با 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 جلوگیری کنید.